summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@gocchin.haxx.dafuq>2021-11-20 02:21:01 -0600
committerroot <root@gocchin.haxx.dafuq>2021-11-20 02:21:01 -0600
commitf7bb8734a2cdde9dbbee2b0080f89150861b5b58 (patch)
treeaee467459c02e7717de933badb165c11aa21ad1f
parent5d4532f601cb9225bbc911a13bedbb48c0499686 (diff)
downloadgentoox-f7bb8734a2cdde9dbbee2b0080f89150861b5b58.tar.gz
gentoox-f7bb8734a2cdde9dbbee2b0080f89150861b5b58.tar.bz2
gentoox-f7bb8734a2cdde9dbbee2b0080f89150861b5b58.zip
update patches
-rwxr-xr-xgentoox_build.sh23
-rw-r--r--patches/app-emulation/virtualbox-guest-additions/020-linux-5-11.patch12
-rw-r--r--patches/dev-lang/ispc/llvm13.patch11
-rw-r--r--patches/dev-qt/qtwebengine/qt5-webengine-glibc-2.33.patch144
-rw-r--r--patches/media-libs/osl/8682211d0bfe5c4be63a4a003d06037ff9721e66.patch48
-rw-r--r--patches/media-libs/osl/bf02d4a98b284e865cda0422dcd5bef2cdc4d662.patch167
-rw-r--r--patches/sys-devel/llvm/disable-bswap-for-spir.patch50
7 files changed, 288 insertions, 167 deletions
diff --git a/gentoox_build.sh b/gentoox_build.sh
index d56f14b..77f4920 100755
--- a/gentoox_build.sh
+++ b/gentoox_build.sh
@@ -246,21 +246,22 @@ cd /usr/src/linux/
if [[ ! -f '/tmp/gentoox-kernelpatches-applied' ]]; then
wget --quiet 'https://raw.githubusercontent.com/archlinux/svntogit-packages/packages/linux/trunk/config' -O .config
+ cp .config .config.org
#wget --quiet -m -np -c 'ck.kolivas.org/patches/5.0/5.12/5.12-ck1/patches/'
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/android-patches-v2/0001-android-export-symbold-and-enable-building-ashmem-an.patch
- wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/arch-patches/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
- wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/btrfs-patches-v3/0001-btrfs-patches.patch
+ wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/arch-patches-v3/0001-arch-patches.patch
+ wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/btrfs-patches-v5/0001-btrfs-patches.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/clearlinux-patches/0001-clearlinux-patches.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/cpu-patches-v2/0001-cpu-patches.patch
- wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/fixes-miscellaneous-v5/0001-fixes-miscellaneous.patch
+ wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/fixes-miscellaneous-v6/0001-fixes-miscellaneous.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/mm-patches/0001-mm-protect-mappings-under-memory-pressure.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/futex-patches/0001-futex-resync-from-gitlab.collabora.com.patch
#wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/futex2-patches/0001-futex2-resync-from-gitlab.collabora.com.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/zstd-patches/0001-zstd-patches.patch
- wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/zstd-dev-patches-v3/0001-zstd-dev-patches.patch
- #wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/cacule-patches/0001-cacule-patches.patch
+ wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/zstd-dev-patches-v5/0001-zstd-dev-patches.patch
+ wget --quiet https://raw.githubusercontent.com/ptr1337/kernel-patches/master/CacULE/v5.15/cacule-5.15-full.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/xanmod-patches/0001-xanmod-patches.patch
- wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/lru-patches-le9-v3/0001-lru-patches.patch
+ #wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/lru-patches-le9-v3/0001-lru-patches.patch
wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/bbr2-patches/0001-bbr2-5.15-introduce-BBRv2.patch
#wget --quiet https://gitlab.com/sirlucjan/kernel-patches/-/raw/master/5.15/bcachefs-patches/0001-bcachefs-5.15-introduce-bcachefs-patchset.patch
@@ -278,7 +279,7 @@ if [[ ! -f '/tmp/gentoox-kernelpatches-applied' ]]; then
patch -p1 < aufs5-standalone/aufs5-kbuild.patch
patch -p1 < aufs5-standalone/aufs5-base.patch
patch -p1 < aufs5-standalone/aufs5-mmap.patch
- patch -p1 < aufs5-standalone/aufs5-standalone.patch
+ #patch -p1 < aufs5-standalone/aufs5-standalone.patch
echo -e "CONFIG_AUFS_FS=y\nCONFIG_AUFS_BRANCH_MAX_127=y\nCONFIG_AUFS_BRANCH_MAX_511=n\nCONFIG_AUFS_BRANCH_MAX_1023=n\nCONFIG_AUFS_BRANCH_MAX_32767=n\nCONFIG_AUFS_HNOTIFY=y\nCONFIG_AUFS_EXPORT=n\nCONFIG_AUFS_XATTR=y\nCONFIG_AUFS_FHSM=y\nCONFIG_AUFS_RDU=n\nCONFIG_AUFS_DIRREN=n\nCONFIG_AUFS_SHWH=n\nCONFIG_AUFS_BR_RAMFS=y\nCONFIG_AUFS_BR_FUSE=n\nCONFIG_AUFS_BR_HFSPLUS=n\nCONFIG_AUFS_DEBUG=n" >> .config
sed -i "s/CONFIG_ISO9660_FS=m/CONFIG_ISO9660_FS=y/" .config
@@ -290,7 +291,7 @@ if [[ ! -f '/tmp/gentoox-kernelpatches-applied' ]]; then
scripts/config --enable CONFIG_ANDROID_BINDERFS
scripts/config --set-str CONFIG_ANDROID_BINDER_DEVICES "binder,hwbinder,vndbinder"
- patch -p1 < 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+ patch -p1 < 0001-arch-patches.patch
patch -p1 < 0001-btrfs-patches.patch
patch -p1 < 0001-clearlinux-patches.patch
patch -p1 < 0001-fixes-miscellaneous.patch
@@ -300,9 +301,9 @@ if [[ ! -f '/tmp/gentoox-kernelpatches-applied' ]]; then
patch -p1 < ../zfs-ungpl-rcu_read_unlock-export.diff
patch -p1 < 0001-zstd-dev-patches.patch
patch -p1 < 0001-zstd-patches.patch
- #patch -p1 < 0001-cacule-patches.patch
+ patch -p1 < cacule-5.15-full.patch
patch -p1 < 0001-xanmod-patches.patch
- patch -p1 < 0001-lru-patches.patch
+ #patch -p1 < 0001-lru-patches.patch
patch -p1 < 0001-mm-protect-mappings-under-memory-pressure.patch
patch -p1 < 0001-bbr2-5.15-introduce-BBRv2.patch
#patch -p1 < 0001-bcachefs-5.15-introduce-bcachefs-patchset.patch
@@ -437,6 +438,7 @@ kde-plasma/plasma-meta colord grub qrcode
kde-plasma/plasma-vault networkmanager
media-video/vlc archive bluray dav1d libass libcaca lirc live opus samba speex skins theora vaapi v4l vdpau x265
media-video/ffmpeg bluray cdio dav1d rubberband libass ogg vpx rtmp aac wavpack opus gme v4l webp theora xcb cpudetection x265 libaom truetype libsoxr modplug samba vaapi vdpau libcaca libdrm librtmp opencl openssl speex jpeg2k
+media-libs/libheif x265
dev-qt/qtmultimedia gstreamer
media-libs/gd avif heif
media-libs/libvpx postproc
@@ -799,7 +801,6 @@ fi
cd /bin
ln -sf dash sh
-usermod -s /bin/dash root
touch /tmp/gentoox-user-configured
HEREDOC
diff --git a/patches/app-emulation/virtualbox-guest-additions/020-linux-5-11.patch b/patches/app-emulation/virtualbox-guest-additions/020-linux-5-11.patch
deleted file mode 100644
index 66b70bf..0000000
--- a/patches/app-emulation/virtualbox-guest-additions/020-linux-5-11.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
-index 7033b45..c8178a6 100644
---- a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
-+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
-@@ -39,6 +39,7 @@
- #endif
- #include <linux/netdevice.h>
- #include <linux/etherdevice.h>
-+#include <linux/ethtool.h>
- #include <linux/rtnetlink.h>
- #include <linux/miscdevice.h>
- #include <linux/inetdevice.h>
diff --git a/patches/dev-lang/ispc/llvm13.patch b/patches/dev-lang/ispc/llvm13.patch
new file mode 100644
index 0000000..daf72b5
--- /dev/null
+++ b/patches/dev-lang/ispc/llvm13.patch
@@ -0,0 +1,11 @@
+--- a/src/module.cpp 2021-07-15 18:04:31.000000000 -0500
++++ b/src/module.cpp 2021-11-20 00:45:28.168852687 -0600
+@@ -1314,7 +1314,7 @@
+ llvm::CodeGenFileType fileType = (outputType == Object) ? llvm::CGFT_ObjectFile : llvm::CGFT_AssemblyFile;
+ bool binary = (fileType == llvm::CGFT_ObjectFile);
+
+- llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::F_None : llvm::sys::fs::F_Text;
++ llvm::sys::fs::OpenFlags flags = binary ? llvm::sys::fs::OF_None : llvm::sys::fs::OF_Text;
+
+ std::error_code error;
+
diff --git a/patches/dev-qt/qtwebengine/qt5-webengine-glibc-2.33.patch b/patches/dev-qt/qtwebengine/qt5-webengine-glibc-2.33.patch
deleted file mode 100644
index 3a0ba3b..0000000
--- a/patches/dev-qt/qtwebengine/qt5-webengine-glibc-2.33.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-# Patch made by Kevin Kofler <Kevin@tigcc.ticalc.org>
-# https://bugzilla.redhat.com/show_bug.cgi?id=1904652
-
-diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
---- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2020-11-07 02:22:36.000000000 +0100
-+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2021-01-20 02:14:53.066223906 +0100
-@@ -257,6 +257,18 @@
- return RestrictKillTarget(current_pid, sysno);
- }
-
-+#if defined(__NR_newfstatat)
-+ if (sysno == __NR_newfstatat) {
-+ return RewriteFstatatSIGSYS();
-+ }
-+#endif
-+
-+#if defined(__NR_fstatat64)
-+ if (sysno == __NR_fstatat64) {
-+ return RewriteFstatatSIGSYS();
-+ }
-+#endif
-+
- if (SyscallSets::IsFileSystem(sysno) ||
- SyscallSets::IsCurrentDirectory(sysno)) {
- return Error(fs_denied_errno);
-diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
---- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2020-11-07 02:22:36.000000000 +0100
-+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2021-01-22 19:02:55.651668257 +0100
-@@ -6,6 +6,8 @@
-
- #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
-
-+#include <errno.h>
-+#include <fcntl.h>
- #include <stddef.h>
- #include <stdint.h>
- #include <string.h>
-@@ -355,6 +357,35 @@
- return -ENOSYS;
- }
-
-+intptr_t SIGSYSFstatatHandler(const struct arch_seccomp_data& args,
-+ void* aux) {
-+ switch (args.nr) {
-+#if defined(__NR_newfstatat)
-+ case __NR_newfstatat:
-+#endif
-+#if defined(__NR_fstatat64)
-+ case __NR_fstatat64:
-+#endif
-+#if defined(__NR_newfstatat) || defined(__NR_fstatat64)
-+ if (*reinterpret_cast<const char *>(args.args[1]) == '\0'
-+ && args.args[3] == static_cast<uint64_t>(AT_EMPTY_PATH)) {
-+ return sandbox::sys_fstat64(static_cast<int>(args.args[0]),
-+ reinterpret_cast<struct stat64 *>(args.args[2]));
-+ } else {
-+ errno = EACCES;
-+ return -1;
-+ }
-+ break;
-+#endif
-+ }
-+
-+ CrashSIGSYS_Handler(args, aux);
-+
-+ // Should never be reached.
-+ RAW_CHECK(false);
-+ return -ENOSYS;
-+}
-+
- bpf_dsl::ResultExpr CrashSIGSYS() {
- return bpf_dsl::Trap(CrashSIGSYS_Handler, NULL);
- }
-@@ -387,6 +418,10 @@
- return bpf_dsl::Trap(SIGSYSSchedHandler, NULL);
- }
-
-+bpf_dsl::ResultExpr RewriteFstatatSIGSYS() {
-+ return bpf_dsl::Trap(SIGSYSFstatatHandler, NULL);
-+}
-+
- void AllocateCrashKeys() {
- #if !defined(OS_NACL_NONSFI)
- if (seccomp_crash_key)
-diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
---- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h 2020-11-07 02:22:36.000000000 +0100
-+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h 2021-01-20 02:11:04.583714199 +0100
-@@ -62,6 +62,10 @@
- // sched_setparam(), sched_setscheduler()
- SANDBOX_EXPORT intptr_t SIGSYSSchedHandler(const arch_seccomp_data& args,
- void* aux);
-+// If the fstatat syscall is actually a disguised fstat, calls the regular fstat
-+// syscall, otherwise, crashes in the same way as CrashSIGSYS_Handler.
-+SANDBOX_EXPORT intptr_t SIGSYSFstatatHandler(const struct arch_seccomp_data& args,
-+ void* aux);
-
- // Variants of the above functions for use with bpf_dsl.
- SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYS();
-@@ -72,6 +76,7 @@
- SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSFutex();
- SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSPtrace();
- SANDBOX_EXPORT bpf_dsl::ResultExpr RewriteSchedSIGSYS();
-+SANDBOX_EXPORT bpf_dsl::ResultExpr RewriteFstatatSIGSYS();
-
- // Allocates a crash key so that Seccomp information can be recorded.
- void AllocateCrashKeys();
-diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc
---- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc 2020-11-07 02:22:36.000000000 +0100
-+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc 2021-01-20 02:41:12.033133269 +0100
-@@ -261,4 +261,13 @@
-
- #endif // defined(MEMORY_SANITIZER)
-
-+SANDBOX_EXPORT int sys_fstat64(int fd, struct stat64 *buf)
-+{
-+#if defined(__NR_fstat64)
-+ return syscall(__NR_fstat64, fd, buf);
-+#else
-+ return syscall(__NR_fstat, fd, buf);
-+#endif
-+}
-+
- } // namespace sandbox
-diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h
---- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h 2020-11-07 02:22:36.000000000 +0100
-+++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h 2021-01-20 02:40:26.499827829 +0100
-@@ -17,6 +17,7 @@
- struct rlimit64;
- struct cap_hdr;
- struct cap_data;
-+struct stat64;
-
- namespace sandbox {
-
-@@ -84,6 +85,9 @@
- const struct sigaction* act,
- struct sigaction* oldact);
-
-+// Recent glibc rewrites fstat to fstatat.
-+SANDBOX_EXPORT int sys_fstat64(int fd, struct stat64 *buf);
-+
- } // namespace sandbox
-
- #endif // SANDBOX_LINUX_SERVICES_SYSCALL_WRAPPERS_H_
diff --git a/patches/media-libs/osl/8682211d0bfe5c4be63a4a003d06037ff9721e66.patch b/patches/media-libs/osl/8682211d0bfe5c4be63a4a003d06037ff9721e66.patch
new file mode 100644
index 0000000..34adf4c
--- /dev/null
+++ b/patches/media-libs/osl/8682211d0bfe5c4be63a4a003d06037ff9721e66.patch
@@ -0,0 +1,48 @@
+From 8682211d0bfe5c4be63a4a003d06037ff9721e66 Mon Sep 17 00:00:00 2001
+From: Luya Tshimbalanga <luya@fedoraproject.org>
+Date: Tue, 28 Sep 2021 10:08:01 -0700
+Subject: [PATCH] Fix compatibility with LLVM 12 and up (#1412)
+
+Upstream LLVM stopped using the compatibility
+spellings of OF_{None,Text,Append} from version 12 and up.
+
+https://reviews.llvm.org/D101650
+
+Signed-off-by: Luya Tshimbalanga <luya@fedoraproject.org>
+---
+ src/liboslexec/llvm_util.cpp | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
+index 4bd0dca35..4d0e1752d 100644
+--- a/src/liboslexec/llvm_util.cpp
++++ b/src/liboslexec/llvm_util.cpp
+@@ -1407,7 +1407,9 @@ LLVM_Util::make_jit_execengine (std::string *err,
+
+ options.NoZerosInBSS = false;
+ options.GuaranteedTailCallOpt = false;
++#if OSL_LLVM_VERSION < 120
+ options.StackAlignmentOverride = 0;
++#endif
+ options.FunctionSections = true;
+ options.UseInitArray = false;
+ options.FloatABIType = llvm::FloatABI::Default;
+@@ -5385,7 +5387,7 @@ void
+ LLVM_Util::write_bitcode_file (const char *filename, std::string *err)
+ {
+ std::error_code local_error;
+- llvm::raw_fd_ostream out (filename, local_error, llvm::sys::fs::F_None);
++ llvm::raw_fd_ostream out (filename, local_error, llvm::sys::fs::OF_None);
+ if (! out.has_error()) {
+ llvm::WriteBitcodeToFile (*module(), out);
+ if (err && local_error)
+@@ -5447,7 +5449,9 @@ LLVM_Util::ptx_compile_group (llvm::Module* lib_module, const std::string& name,
+ options.AllowFPOpFusion = llvm::FPOpFusion::Fast;
+ options.NoZerosInBSS = 0;
+ options.GuaranteedTailCallOpt = 0;
++#if OSL_LLVM_VERSION < 120
+ options.StackAlignmentOverride = 0;
++#endif
+ options.UseInitArray = 0;
+
+ llvm::TargetMachine* target_machine = llvm_target->createTargetMachine(
diff --git a/patches/media-libs/osl/bf02d4a98b284e865cda0422dcd5bef2cdc4d662.patch b/patches/media-libs/osl/bf02d4a98b284e865cda0422dcd5bef2cdc4d662.patch
new file mode 100644
index 0000000..9407c28
--- /dev/null
+++ b/patches/media-libs/osl/bf02d4a98b284e865cda0422dcd5bef2cdc4d662.patch
@@ -0,0 +1,167 @@
+From bf02d4a98b284e865cda0422dcd5bef2cdc4d662 Mon Sep 17 00:00:00 2001
+From: Larry Gritz <lg@larrygritz.com>
+Date: Sun, 24 Oct 2021 15:29:08 -0700
+Subject: [PATCH] Changes to work with LLVM 13 (#1420)
+
+And a few places to let it compile with clang 13's new warnings.
+
+Signed-off-by: Larry Gritz <lg@larrygritz.com>
+---
+ src/include/OSL/llvm_util.h | 17 +++++++++--
+ src/liboslexec/llvm_util.cpp | 45 ++++++++++++++++++++++++++----
+ src/liboslexec/runtimeoptimize.cpp | 2 --
+ 4 files changed, 62 insertions(+), 18 deletions(-)
+
+diff --git a/src/include/OSL/llvm_util.h b/src/include/OSL/llvm_util.h
+index fbf091d60..95df9632f 100644
+--- a/src/include/OSL/llvm_util.h
++++ b/src/include/OSL/llvm_util.h
+@@ -802,6 +802,9 @@ class OSLEXECPUBLIC LLVM_Util {
+ llvm::Value *src, int srcalign, int len);
+
+ /// Dereference a pointer: return *ptr
++ /// type is the type of the thing being pointed to.
++ llvm::Value *op_load (llvm::Type* type, llvm::Value *ptr);
++ // Blind pointer version that's deprecated as of LLVM13:
+ llvm::Value *op_load (llvm::Value *ptr);
+
+ llvm::Value *op_gather(llvm::Value *ptr, llvm::Value *index);
+@@ -830,17 +833,25 @@ class OSLEXECPUBLIC LLVM_Util {
+
+ /// Generate a GEP (get element pointer) where the element index is an
+ /// llvm::Value, which can be generated from either a constant or a
+- /// runtime-computed integer element index.
++ /// runtime-computed integer element index. `type` is the type of the data
++ /// we're retrieving.
++ llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, llvm::Value *elem);
++ // Blind pointer version that's deprecated as of LLVM13:
+ llvm::Value *GEP (llvm::Value *ptr, llvm::Value *elem);
+
+ /// Generate a GEP (get element pointer) with an integer element
+- /// offset.
++ /// offset. `type` is the type of the data we're retrieving.
++ llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, int elem);
++ // Blind pointer version that's deprecated as of LLVM13:
+ llvm::Value *GEP (llvm::Value *ptr, int elem);
+
+ /// Generate a GEP (get element pointer) with two integer element
+ /// offsets. This is just a special (and common) case of GEP where
+ /// we have a 2-level hierarchy and we have fixed element indices
+- /// that are known at compile time.
++ /// that are known at compile time. `type` is the type of the data we're
++ /// retrieving.
++ llvm::Value *GEP (llvm::Type* type, llvm::Value *ptr, int elem1, int elem2);
++ // Blind pointer version that's deprecated as of LLVM13:
+ llvm::Value *GEP (llvm::Value *ptr, int elem1, int elem2);
+
+ // Arithmetic ops. It auto-detects the type (int vs float).
+diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
+index 4d0e1752d..a1d31fe4d 100644
+--- a/src/liboslexec/llvm_util.cpp
++++ b/src/liboslexec/llvm_util.cpp
+@@ -3595,10 +3595,18 @@ LLVM_Util::op_memcpy (llvm::Value *dst, int dstalign,
+
+
+
++llvm::Value *
++LLVM_Util::op_load (llvm::Type* type, llvm::Value* ptr)
++{
++ return builder().CreateLoad (type, ptr);
++}
++
++
++
+ llvm::Value *
+ LLVM_Util::op_load (llvm::Value *ptr)
+ {
+- return builder().CreateLoad (ptr);
++ return op_load(ptr->getType()->getPointerElementType(), ptr);
+ }
+
+
+@@ -4883,7 +4891,7 @@ LLVM_Util::op_store (llvm::Value *val, llvm::Value *ptr)
+ // happen and a read+.
+ // TODO: Optimization, if we know this was the final store to
+ // the ptr, we could force a masked store vs. load/blend
+- llvm::Value *previous_value = builder().CreateLoad (ptr);
++ llvm::Value *previous_value = op_load(ptr);
+ if (false == mi.negate) {
+ llvm::Value *blended_value = builder().CreateSelect(mi.mask, val, previous_value);
+ builder().CreateStore(blended_value, ptr);
+@@ -4924,10 +4932,27 @@ LLVM_Util::op_store_mask (llvm::Value *llvm_mask, llvm::Value *native_mask_ptr)
+
+
+
++llvm::Value *
++LLVM_Util::GEP (llvm::Type* type, llvm::Value* ptr, llvm::Value* elem)
++{
++ return builder().CreateGEP(type, ptr, elem);
++}
++
++
++
+ llvm::Value *
+ LLVM_Util::GEP (llvm::Value *ptr, llvm::Value *elem)
+ {
+- return builder().CreateGEP (ptr, elem);
++ return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
++ elem);
++}
++
++
++
++llvm::Value *
++LLVM_Util::GEP (llvm::Type* type, llvm::Value* ptr, int elem)
++{
++ return builder().CreateConstGEP1_32(type, ptr, elem);
+ }
+
+
+@@ -4935,7 +4960,16 @@ LLVM_Util::GEP (llvm::Value *ptr, llvm::Value *elem)
+ llvm::Value *
+ LLVM_Util::GEP (llvm::Value *ptr, int elem)
+ {
+- return builder().CreateConstGEP1_32 (ptr, elem);
++ return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
++ elem);
++}
++
++
++
++llvm::Value *
++LLVM_Util::GEP(llvm::Type* type, llvm::Value* ptr, int elem1, int elem2)
++{
++ return builder().CreateConstGEP2_32 (type, ptr, elem1, elem2);
+ }
+
+
+@@ -4943,7 +4977,8 @@ LLVM_Util::GEP (llvm::Value *ptr, int elem)
+ llvm::Value *
+ LLVM_Util::GEP (llvm::Value *ptr, int elem1, int elem2)
+ {
+- return builder().CreateConstGEP2_32 (nullptr, ptr, elem1, elem2);
++ return GEP(ptr->getType()->getScalarType()->getPointerElementType(), ptr,
++ elem1, elem2);
+ }
+
+
+diff --git a/src/liboslexec/runtimeoptimize.cpp b/src/liboslexec/runtimeoptimize.cpp
+index dfe554164..da67c712e 100644
+--- a/src/liboslexec/runtimeoptimize.cpp
++++ b/src/liboslexec/runtimeoptimize.cpp
+@@ -2284,7 +2284,6 @@ RuntimeOptimizer::optimize_instance ()
+ // passes, but we have a hard cutoff just to be sure we don't
+ // ever get into an infinite loop from an unforseen cycle where we
+ // end up inadvertently transforming A => B => A => etc.
+- int totalchanged = 0;
+ int reallydone = 0; // Force a few passes after we think we're done
+ int npasses = shadingsys().opt_passes();
+ for (m_pass = 0; m_pass < npasses; ++m_pass) {
+@@ -2345,7 +2344,6 @@ RuntimeOptimizer::optimize_instance ()
+ // If nothing changed, we're done optimizing. But wait, it may be
+ // that after re-tracking variable lifetimes, we can notice new
+ // optimizations! So force another pass, then we're really done.
+- totalchanged += changed;
+ if (changed < 1) {
+ if (++reallydone > 3)
+ break;
diff --git a/patches/sys-devel/llvm/disable-bswap-for-spir.patch b/patches/sys-devel/llvm/disable-bswap-for-spir.patch
new file mode 100644
index 0000000..1138501
--- /dev/null
+++ b/patches/sys-devel/llvm/disable-bswap-for-spir.patch
@@ -0,0 +1,50 @@
+# Based on https://github.com/ispc/ispc/blob/main/llvm_patches/12_0_disable-A-B-A-B-and-BSWAP-in-InstCombine.patch
+
+diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+index d01a021bf3f4..bccce825a03d 100644
+--- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
++++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+@@ -15,6 +15,7 @@
+ #include "llvm/ADT/APInt.h"
+ #include "llvm/ADT/STLExtras.h"
+ #include "llvm/ADT/SmallVector.h"
++#include "llvm/ADT/Triple.h"
+ #include "llvm/Analysis/InstructionSimplify.h"
+ #include "llvm/Analysis/ValueTracking.h"
+ #include "llvm/IR/Constant.h"
+@@ -1369,9 +1370,12 @@ Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) {
+ }
+ }
+
+- // A+B --> A|B iff A and B have no bits set in common.
+- if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT))
+- return BinaryOperator::CreateOr(LHS, RHS);
++ // Disable this transformation for ISPC SPIR-V
++ if (!Triple(I.getModule()->getTargetTriple()).isSPIR()) {
++ // A+B --> A|B iff A and B have no bits set in common.
++ if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT))
++ return BinaryOperator::CreateOr(LHS, RHS);
++ }
+
+ // add (select X 0 (sub n A)) A --> select X A n
+ {
+diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+index 120852c44474..8de55311ce3e 100644
+--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
++++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+@@ -2671,9 +2671,12 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
+ if (Instruction *FoldedLogic = foldBinOpIntoSelectOrPhi(I))
+ return FoldedLogic;
+
+- if (Instruction *BitOp = matchBSwapOrBitReverse(I, /*MatchBSwaps*/ true,
+- /*MatchBitReversals*/ true))
+- return BitOp;
++ // Disable this transformation for ISPC SPIR-V
++ if (!Triple(I.getModule()->getTargetTriple()).isSPIR()) {
++ if (Instruction *BitOp = matchBSwapOrBitReverse(I, /*MatchBSwaps*/ true,
++ /*MatchBitReversals*/ true))
++ return BitOp;
++ }
+
+ if (Instruction *Funnel = matchFunnelShift(I, *this))
+ return Funnel;