]> git.pld-linux.org Git - packages/Mesa.git/commitdiff
upstream fixes for llvm 17
authorJan Palus <atler@pld-linux.org>
Sun, 8 Oct 2023 08:40:00 +0000 (10:40 +0200)
committerJan Palus <atler@pld-linux.org>
Sun, 8 Oct 2023 08:40:00 +0000 (10:40 +0200)
Mesa.spec
llvm17.patch [new file with mode: 0644]

index b876b4e53fde872b7463597a1390822d06b305d4..ecd497709d86ddfce79c01ea9c8e9c4a46f9c20a 100644 (file)
--- a/Mesa.spec
+++ b/Mesa.spec
@@ -79,6 +79,7 @@ License:      MIT (core) and others - see license.html file
 Group:         X11/Libraries
 Source0:       https://archive.mesa3d.org/mesa-%{version}.tar.xz
 # Source0-md5: 0d89ec154ac9f06a1e876214114ed9af
+Patch0:                llvm17.patch
 URL:           https://www.mesa3d.org/
 %if %{with opencl_spirv} || %{with gallium_rusticl}
 BuildRequires: SPIRV-LLVM-Translator-devel >= 8.0.1.3
@@ -1554,6 +1555,7 @@ radv - eksperymentalny sterownik Vulkan dla GPU firmy AMD.
 
 %prep
 %setup -q -n mesa-%{version}
+%patch0 -p1
 
 %build
 %if %{with opencl}
diff --git a/llvm17.patch b/llvm17.patch
new file mode 100644 (file)
index 0000000..e3d2878
--- /dev/null
@@ -0,0 +1,169 @@
+From cda32e18a08fa2f2289a7409f37f44d5643e6aea Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 23 Jun 2023 01:20:38 -0700
+Subject: [PATCH] gallium: Fix build with llvm 17
+
+These headers are not available for C files in llvm 17+
+and they seem to be not needed to compile after all with llvm 17
+so add conditions to exclude them for llvm >= 17
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/gallium/auxiliary/gallivm/lp_bld_init.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c
+index cd2108f3a088d..b1a4d0388a6a0 100644
+--- a/src/gallium/auxiliary/gallivm/lp_bld_init.c
++++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c
+@@ -46,15 +46,19 @@
+ #if GALLIVM_USE_NEW_PASS == 1
+ #include <llvm-c/Transforms/PassBuilder.h>
+ #elif GALLIVM_HAVE_CORO == 1
++#if LLVM_VERSION_MAJOR < 17
+ #include <llvm-c/Transforms/Scalar.h>
+-#if LLVM_VERSION_MAJOR >= 7
++#endif
++#if LLVM_VERSION_MAJOR >= 7 && LLVM_VERSION_MAJOR < 17
+ #include <llvm-c/Transforms/Utils.h>
+ #endif
+ #if LLVM_VERSION_MAJOR <= 8 && (DETECT_ARCH_AARCH64 || DETECT_ARCH_ARM || DETECT_ARCH_S390 || DETECT_ARCH_MIPS64)
+ #include <llvm-c/Transforms/IPO.h>
+ #endif
++#if LLVM_VERSION_MAJOR < 17
+ #include <llvm-c/Transforms/Coroutines.h>
+ #endif
++#endif
+ unsigned gallivm_perf = 0;
+-- 
+GitLab
+
+From 2d4fe5f229791fde52846b3f583c12508b5109d6 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+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 <Dieter@nuetzel-hh.de>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24879>
+---
+ .../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 7a50fea332395..43d26fe1abbce 100644
+--- a/src/gallium/frontends/clover/llvm/invocation.cpp
++++ b/src/gallium/frontends/clover/llvm/invocation.cpp
+@@ -27,13 +27,17 @@
+ #include <llvm/IR/DiagnosticPrinter.h>
+ #include <llvm/IR/DiagnosticInfo.h>
+ #include <llvm/IR/LLVMContext.h>
++#include <llvm/IR/Module.h>
+ #include <llvm/Support/raw_ostream.h>
+-#include <llvm/Transforms/IPO/PassManagerBuilder.h>
++#include <llvm/Transforms/IPO/Internalize.h>
+ #include <llvm-c/Target.h>
+ #ifdef HAVE_CLOVER_SPIRV
+ #include <LLVMSPIRVLib/LLVMSPIRVLib.h>
+ #endif
++#include <llvm-c/TargetMachine.h>
++#include <llvm-c/Transforms/PassBuilder.h>
++#include <llvm/Support/CBindingWrapping.h>
+ #include <clang/CodeGen/CodeGenAction.h>
+ #include <clang/Lex/PreprocessorOptions.h>
+ #include <clang/Frontend/TextDiagnosticBuffer.h>
+@@ -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<std::string> 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<O0>";
++         level = LLVMCodeGenLevelNone;
++         break;
++      case 1:
++         opt_str = "default<O1>";
++         level = LLVMCodeGenLevelLess;
++         break;
++      case 2:
++         opt_str = "default<O2>";
++         level = LLVMCodeGenLevelDefault;
++         break;
++      case 3:
++         opt_str = "default<O3>";
++         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<Module>
+@@ -500,7 +538,7 @@ clover::llvm::link_program(const std::vector<binary> &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() + "-" +
+-- 
+GitLab
+
This page took 0.199171 seconds and 4 git commands to generate.