From d10b89477c4b5402b068b5d7f561da3e03c503f926ec1a28335af125863b4a0f Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Thu, 21 Sep 2023 19:08:18 +0000 Subject: [PATCH] Accepting request 1112842 from home:aaronpuchert:llvm-next - Backport upstream patches for compatibility with LLVM 17: * U_llvmpipe-only-include-old-Transform-includes-when-ne.patch removes unneeded includes of header files that no longer exist. * U_clover-llvm-move-to-modern-pass-manager.patch migrates Clover to the new pass manager, since the old PM has been removed. OBS-URL: https://build.opensuse.org/request/show/1112842 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=1232 --- Mesa.changes | 9 ++ Mesa.spec | 5 + ...ver-llvm-move-to-modern-pass-manager.patch | 127 ++++++++++++++++++ ...clude-old-Transform-includes-when-ne.patch | 41 ++++++ 4 files changed, 182 insertions(+) create mode 100644 U_clover-llvm-move-to-modern-pass-manager.patch create mode 100644 U_llvmpipe-only-include-old-Transform-includes-when-ne.patch diff --git a/Mesa.changes b/Mesa.changes index 0dba396..cf397a5 100644 --- a/Mesa.changes +++ b/Mesa.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Thu Sep 21 15:13:11 UTC 2023 - Aaron Puchert + +- Backport upstream patches for compatibility with LLVM 17: + * U_llvmpipe-only-include-old-Transform-includes-when-ne.patch + removes unneeded includes of header files that no longer exist. + * U_clover-llvm-move-to-modern-pass-manager.patch migrates Clover + to the new pass manager, since the old PM has been removed. + ------------------------------------------------------------------- Thu Sep 21 10:26:36 UTC 2023 - Stefan Dirsch diff --git a/Mesa.spec b/Mesa.spec index 3fbfb86..be009ab 100644 --- a/Mesa.spec +++ b/Mesa.spec @@ -138,6 +138,9 @@ Source4: manual-pages.tar.bz2 Source6: Mesa-rpmlintrc Source7: Mesa.keyring Patch2: n_add-Mesa-headers-again.patch +# Patches for LLVM 17, should all be in 23.2. +Patch3: U_llvmpipe-only-include-old-Transform-includes-when-ne.patch +Patch4: U_clover-llvm-move-to-modern-pass-manager.patch # never to be upstreamed Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch Patch58: u_dep_xcb.patch @@ -770,6 +773,8 @@ programs against the XA state tracker. rm -rf docs/README.{VMS,WIN32,OS2} %patch2 -p1 +%patch3 -p1 +%patch4 -p1 # no longer needed since gstreamer-plugins-vaapi 1.18.4 %if 0%{?suse_version} < 1550 %patch54 -p1 diff --git a/U_clover-llvm-move-to-modern-pass-manager.patch b/U_clover-llvm-move-to-modern-pass-manager.patch new file mode 100644 index 0000000..a21a9ee --- /dev/null +++ b/U_clover-llvm-move-to-modern-pass-manager.patch @@ -0,0 +1,127 @@ +From 2d4fe5f229791fde52846b3f583c12508b5109d6 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Fri, 25 Aug 2023 12:43:44 +1000 +Subject: [PATCH] clover/llvm: move to modern pass manager. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This seems like it should work, but I haven't tested it yet. + +Tested-by: Dieter Nützel +Part-of: +--- + .../frontends/clover/llvm/invocation.cpp | 64 +++++++++++++++---- + 1 file changed, 51 insertions(+), 13 deletions(-) + +diff --git a/src/gallium/frontends/clover/llvm/invocation.cpp b/src/gallium/frontends/clover/llvm/invocation.cpp +index 7a50fea3323..43d26fe1abb 100644 +--- a/src/gallium/frontends/clover/llvm/invocation.cpp ++++ b/src/gallium/frontends/clover/llvm/invocation.cpp +@@ -27,13 +27,17 @@ + #include + #include + #include ++#include + #include +-#include ++#include + #include + #ifdef HAVE_CLOVER_SPIRV + #include + #endif + ++#include ++#include ++#include + #include + #include + #include +@@ -439,10 +443,10 @@ clover::llvm::compile_program(const std::string &source, + + namespace { + void +- optimize(Module &mod, unsigned optimization_level, ++ optimize(Module &mod, ++ const std::string& ir_target, ++ unsigned optimization_level, + bool internalize_symbols) { +- ::llvm::legacy::PassManager pm; +- + // By default, the function internalizer pass will look for a function + // called "main" and then mark all other functions as internal. Marking + // functions as internal enables the optimizer to perform optimizations +@@ -458,19 +462,53 @@ namespace { + if (internalize_symbols) { + std::vector names = + map(std::mem_fn(&Function::getName), get_kernels(mod)); +- pm.add(::llvm::createInternalizePass( ++ internalizeModule(mod, + [=](const ::llvm::GlobalValue &gv) { + return std::find(names.begin(), names.end(), + gv.getName()) != names.end(); +- })); ++ }); + } + +- ::llvm::PassManagerBuilder pmb; +- pmb.OptLevel = optimization_level; +- pmb.LibraryInfo = new ::llvm::TargetLibraryInfoImpl( +- ::llvm::Triple(mod.getTargetTriple())); +- pmb.populateModulePassManager(pm); +- pm.run(mod); ++ ++ const char *opt_str = NULL; ++ LLVMCodeGenOptLevel level; ++ switch (optimization_level) { ++ case 0: ++ default: ++ opt_str = "default"; ++ level = LLVMCodeGenLevelNone; ++ break; ++ case 1: ++ opt_str = "default"; ++ level = LLVMCodeGenLevelLess; ++ break; ++ case 2: ++ opt_str = "default"; ++ level = LLVMCodeGenLevelDefault; ++ break; ++ case 3: ++ opt_str = "default"; ++ level = LLVMCodeGenLevelAggressive; ++ break; ++ } ++ ++ const target &target = ir_target; ++ LLVMTargetRef targ; ++ char *err_message; ++ ++ if (LLVMGetTargetFromTriple(target.triple.c_str(), &targ, &err_message)) ++ return; ++ LLVMTargetMachineRef tm = ++ LLVMCreateTargetMachine(targ, target.triple.c_str(), ++ target.cpu.c_str(), "", level, ++ LLVMRelocDefault, LLVMCodeModelDefault); ++ ++ if (!tm) ++ return; ++ LLVMPassBuilderOptionsRef opts = LLVMCreatePassBuilderOptions(); ++ LLVMRunPasses(wrap(&mod), opt_str, tm, opts); ++ ++ LLVMDisposeTargetMachine(tm); + } + + std::unique_ptr +@@ -500,7 +538,7 @@ clover::llvm::link_program(const std::vector &binaries, + auto c = create_compiler_instance(dev, dev.ir_target(), options, r_log); + auto mod = link(*ctx, *c, binaries, r_log); + +- optimize(*mod, c->getCodeGenOpts().OptimizationLevel, !create_library); ++ optimize(*mod, dev.ir_target(), c->getCodeGenOpts().OptimizationLevel, !create_library); + + static std::atomic_uint seq(0); + const std::string id = "." + mod->getModuleIdentifier() + "-" + +-- +2.42.0 + diff --git a/U_llvmpipe-only-include-old-Transform-includes-when-ne.patch b/U_llvmpipe-only-include-old-Transform-includes-when-ne.patch new file mode 100644 index 0000000..aca1096 --- /dev/null +++ b/U_llvmpipe-only-include-old-Transform-includes-when-ne.patch @@ -0,0 +1,41 @@ +From 9ba416cdc67073cdda9a73fe9d37304b82bdd526 Mon Sep 17 00:00:00 2001 +From: Pierre-Eric Pelloux-Prayer +Date: Fri, 12 May 2023 09:58:26 +0200 +Subject: [PATCH] llvmpipe: only include old Transform includes when needed + +This fixes building with recent LLVM where these 2 .h files +were removed. + +Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8671 +Acked-By: Mike Blumenkrantz +Part-of: +--- + src/gallium/auxiliary/gallivm/lp_bld_init.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c +index 24d082398e9..9e0d6a5f643 100644 +--- a/src/gallium/auxiliary/gallivm/lp_bld_init.c ++++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c +@@ -42,14 +42,14 @@ + + #include + #include +-#include +-#if LLVM_VERSION_MAJOR >= 7 +-#include +-#endif + #include + #if GALLIVM_USE_NEW_PASS == 1 + #include + #elif GALLIVM_HAVE_CORO == 1 ++#include ++#if LLVM_VERSION_MAJOR >= 7 ++#include ++#endif + #if LLVM_VERSION_MAJOR <= 8 && (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM || DETECT_ARCH_S390 || DETECT_ARCH_MIPS64) + #include + #endif +-- +2.42.0 +