You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/media-libs/osl/files/osl-1.12.0.2-llvm-12.patch

241 lines
11 KiB

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());