summaryrefslogtreecommitdiff
path: root/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-libs/osl/files/osl-1.12.0.2-llvm-12.patch')
-rw-r--r--media-libs/osl/files/osl-1.12.0.2-llvm-12.patch240
1 files changed, 240 insertions, 0 deletions
diff --git a/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch b/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch
new file mode 100644
index 000000000000..dcf9ac863f73
--- /dev/null
+++ b/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch
@@ -0,0 +1,240 @@
+commit f76ea6220a5f0d59f5f43d3d6d526f1fd09b90f7
+Author: Euan Haahr <euanhaahrmail2@gmail.com>
+Date: Fri Feb 5 22:51:14 2021 +0000
+
+ Various fixes for LLVM 12 compatibility (1351)
+
+ Removed use of options.PrintMachineCode since this has been removed as
+ of llvm 12. Converted uses of DebugLoc::get to DILocation::get since
+ it has been deprecated and removed as of llvm 12.
+
+ PrintMachine code will only be used if llvm is lower than version 12.
+ TODO: Needs to be re-added in the new way for LLVM12. (LG just doesn't
+ have time to figure this out right now.)
+
+ Pass adjustment as various things have been deprecated or changed
+ names. (LG)
+
+ Signed-off-by: Euan Haahr <euanhaahrmail2@gmail.com>
+ Signed-off-by: Larry Gritz <lg@larrygritz.com>
+
+diff --git a/src/liboslexec/llvm_passes.h b/src/liboslexec/llvm_passes.h
+index 4ec3489c..7c14fc76 100644
+--- a/src/liboslexec/llvm_passes.h
++++ b/src/liboslexec/llvm_passes.h
+@@ -73,9 +73,14 @@ public:
+ // 16 bit and 32 bit native mask representation to be passed as a
+ // livein.
+ m_native_mask_type = llvm::FixedVectorType::get(llvm_type_int32, WidthT);
++# if OSL_LLVM_VERSION >= 112
++ m_wide_zero_initializer = llvm::ConstantDataVector::getSplat(WidthT,
++ llvm::ConstantInt::get(M.getContext(), llvm::APInt(32,0)));
++# else
+ m_wide_zero_initializer = llvm::ConstantVector::getSplat(
+ llvm::ElementCount(WidthT, false),
+ llvm::ConstantInt::get (M.getContext(), llvm::APInt(32,0)));
++# endif
+ #else
+ m_llvm_mask_type = llvm::VectorType::get(llvm_type_bool, WidthT);
+ m_native_mask_type = llvm::VectorType::get(llvm_type_int32, WidthT);
+@@ -341,9 +346,8 @@ public:
+ // of the mask promotion will always be correct here. Should 16 bit
+ // support be needed, this pass could be extended.
+ m_native_mask_type = llvm::FixedVectorType::get(llvm_type_int32, WidthT);
+- m_wide_zero_initializer = llvm::ConstantVector::getSplat(
+- llvm::ElementCount(WidthT, false),
+- llvm::ConstantInt::get (M.getContext(), llvm::APInt(32,0)));
++ m_wide_zero_initializer = llvm::ConstantDataVector::getSplat(WidthT,
++ llvm::ConstantInt::get(M.getContext(), llvm::APInt(32,0)));
+ #else
+ m_llvm_mask_type = llvm::VectorType::get(llvm_type_bool, WidthT);
+ m_native_mask_type = llvm::VectorType::get(llvm_type_int32, WidthT);
+diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
+index fed8c5ec..b2a02f61 100644
+--- a/src/liboslexec/llvm_util.cpp
++++ b/src/liboslexec/llvm_util.cpp
+@@ -20,6 +20,7 @@
+ #include "llvm_passes.h"
+
+ #include <llvm/InitializePasses.h>
++#include <llvm/Pass.h>
+ #include <llvm/IR/Constant.h>
+ #include <llvm/IR/Constants.h>
+ #include <llvm/IR/DebugInfo.h>
+@@ -59,6 +60,7 @@
+ #include <llvm/Analysis/BasicAliasAnalysis.h>
+ #include <llvm/Analysis/TypeBasedAliasAnalysis.h>
+ #include <llvm/Analysis/TargetTransformInfo.h>
++#include <llvm/IR/Function.h>
+ #include <llvm/IR/Verifier.h>
+ #include <llvm/Target/TargetMachine.h>
+ #include <llvm/Target/TargetOptions.h>
+@@ -74,10 +76,9 @@
+ #include <llvm/Transforms/Scalar/GVN.h>
+ #include <llvm/Transforms/Utils.h>
+
+-
+-#include <llvm/Pass.h>
+-#include <llvm/IR/Function.h>
+-#include <llvm/Support/raw_ostream.h>
++#if OSL_LLVM_VERSION >= 120
++#include <llvm/CodeGen/Passes.h>
++#endif
+
+ // additional includes for PTX generation
+ #include <llvm/Transforms/Utils/SymbolRewriter.h>
+@@ -129,6 +130,11 @@ static bool setup_done = false;
+ static std::unique_ptr<std::vector<std::shared_ptr<LLVMMemoryManager> >> jitmm_hold;
+ static int jit_mem_hold_users = 0;
+
++
++#if OSL_LLVM_VERSION >= 120
++llvm::raw_os_ostream raw_cout(std::cout);
++#endif
++
+ }; // end anon namespace
+
+
+@@ -701,7 +707,8 @@ LLVM_Util::debug_pop_function()
+ // that has been finalized, point it back to the compilation unit
+ OSL_ASSERT(m_builder);
+ OSL_ASSERT(m_builder->getCurrentDebugLocation().get() != nullptr);
+- m_builder->SetCurrentDebugLocation(llvm::DebugLoc::get(static_cast<unsigned int>(1),
++ m_builder->SetCurrentDebugLocation(llvm::DILocation::get(getCurrentDebugScope()->getContext(),
++ static_cast<unsigned int>(1),
+ static_cast<unsigned int>(0), /* column? we don't know it, may be worth tracking through osl->oso*/
+ getCurrentDebugScope()));
+
+@@ -776,7 +783,8 @@ LLVM_Util::debug_set_location(ustring sourcefile, int sourceline)
+ }
+ if (newDebugLocation) {
+ llvm::DebugLoc debug_location =
+- llvm::DebugLoc::get(static_cast<unsigned int>(sourceline),
++ llvm::DILocation::get(sp->getContext(),
++ static_cast<unsigned int>(sourceline),
+ static_cast<unsigned int>(0), /* column? we don't know it, may be worth tracking through osl->oso*/
+ sp,
+ inlineSite);
+@@ -958,7 +966,8 @@ LLVM_Util::new_builder (llvm::BasicBlock *block)
+ m_builder = new IRBuilder (block);
+ if (this->debug_is_enabled()) {
+ OSL_ASSERT(getCurrentDebugScope());
+- m_builder->SetCurrentDebugLocation(llvm::DebugLoc::get(static_cast<unsigned int>(1),
++ m_builder->SetCurrentDebugLocation(llvm::DILocation::get(getCurrentDebugScope()->getContext(),
++ static_cast<unsigned int>(1),
+ static_cast<unsigned int>(0), /* column? we don't know it, may be worth tracking through osl->oso*/
+ getCurrentDebugScope()));
+ }
+@@ -1386,7 +1395,13 @@ LLVM_Util::make_jit_execengine (std::string *err,
+ options.RelaxELFRelocations = false;
+ //options.DebuggerTuning = llvm::DebuggerKind::GDB;
+
++ // TODO: Find equivalent function for PrintMachineCode post LLVM 12
++#if OSL_LLVM_VERSION < 120
++ // This option disappeared from the TargetOptions struct in LLVM 12.
++ // It is instead accomplished with a MachineFunctionPrinterPass.
+ options.PrintMachineCode = dumpasm();
++#endif
++
+ engine_builder.setTargetOptions(options);
+
+ detect_cpu_features(requestedISA, !jit_fma());
+@@ -1715,14 +1730,14 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+
+ mpm.add(llvm::createReassociatePass());
+ mpm.add(llvm::createConstantPropagationPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++ mpm.add(llvm::createDeadCodeEliminationPass());
+ mpm.add(llvm::createCFGSimplificationPass());
+
+ mpm.add(llvm::createPromoteMemoryToRegisterPass());
+ mpm.add(llvm::createAggressiveDCEPass());
+
+ mpm.add(llvm::createInstructionCombiningPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++ mpm.add(llvm::createDeadCodeEliminationPass());
+
+ mpm.add(llvm::createJumpThreadingPass());
+ mpm.add(llvm::createSROAPass());
+@@ -1746,8 +1761,10 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+
+ // Eliminate and remove as much as possible up front
+ mpm.add(llvm::createReassociatePass());
++#if OSL_LLVM_VERSION < 120
+ mpm.add(llvm::createConstantPropagationPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++#endif
++ mpm.add(llvm::createDeadCodeEliminationPass());
+ mpm.add(llvm::createCFGSimplificationPass());
+
+ mpm.add(llvm::createPromoteMemoryToRegisterPass());
+@@ -1784,7 +1801,7 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+ mpm.add(llvm::createInstructionCombiningPass());
+
+ mpm.add(llvm::createPromoteMemoryToRegisterPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++ mpm.add(llvm::createDeadCodeEliminationPass());
+
+ mpm.add(llvm::createGlobalDCEPass());
+ mpm.add(llvm::createConstantMergePass());
+@@ -1803,8 +1820,10 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+ mpm.add(llvm::createLowerExpectIntrinsicPass());
+
+ mpm.add(llvm::createReassociatePass());
++#if OSL_LLVM_VERSION < 120
+ mpm.add(llvm::createConstantPropagationPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++#endif
++ mpm.add(llvm::createDeadCodeEliminationPass());
+ mpm.add(llvm::createCFGSimplificationPass());
+
+ mpm.add(llvm::createPromoteMemoryToRegisterPass());
+@@ -1814,7 +1833,7 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+ // optimizations, should attempt to reduce the number of times it is
+ // executed, if at all
+ mpm.add(llvm::createInstructionCombiningPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++ mpm.add(llvm::createDeadCodeEliminationPass());
+
+ mpm.add(llvm::createSROAPass());
+ mpm.add(llvm::createInstructionCombiningPass());
+@@ -1822,7 +1841,16 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+ mpm.add(llvm::createPromoteMemoryToRegisterPass());
+ mpm.add(llvm::createGlobalOptimizerPass());
+ mpm.add(llvm::createReassociatePass());
++#if OSL_LLVM_VERSION < 120
+ mpm.add(llvm::createIPConstantPropagationPass());
++#else
++ // createIPConstantPropagationPass disappeared with LLVM 12.
++ // Comments in their PR indicate that IPSCCP is better, but I don't
++ // know if that means such a pass should be *right here*. I leave it
++ // to others who use opt==13 to continue to curate this particular
++ // list of passes.
++ mpm.add(llvm::createIPSCCPPass());
++#endif
+
+ mpm.add(llvm::createDeadArgEliminationPass());
+ mpm.add(llvm::createInstructionCombiningPass());
+@@ -1831,8 +1859,10 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+ mpm.add(llvm::createPostOrderFunctionAttrsLegacyPass());
+ mpm.add(llvm::createReversePostOrderFunctionAttrsPass());
+ mpm.add(llvm::createFunctionInliningPass());
++#if OSL_LLVM_VERSION < 120
+ mpm.add(llvm::createConstantPropagationPass());
+- mpm.add(llvm::createDeadInstEliminationPass());
++#endif
++ mpm.add(llvm::createDeadCodeEliminationPass());
+ mpm.add(llvm::createCFGSimplificationPass());
+
+ mpm.add(llvm::createArgumentPromotionPass());
+@@ -1845,8 +1875,9 @@ LLVM_Util::setup_optimization_passes (int optlevel, bool target_host)
+ mpm.add(llvm::createTailCallEliminationPass());
+
+ mpm.add(llvm::createFunctionInliningPass());
++#if OSL_LLVM_VERSION < 120
+ mpm.add(llvm::createConstantPropagationPass());
+-
++#endif
+
+ mpm.add(llvm::createIPSCCPPass());
+ mpm.add(llvm::createDeadArgEliminationPass());