[Mesa-dev] [PATCH v2] clover/llvm: Drop support for LLVM < 3.9.
Emil Velikov
emil.l.velikov at gmail.com
Tue Feb 20 18:17:03 UTC 2018
On 28 October 2017 at 00:32, Francisco Jerez <currojerez at riseup.net> wrote:
> Vedran Miletić <vedran at miletic.net> writes:
>
>> v2: remove/inline compat stuff
>>
>> Reviewed-by: Francisco Jerez <currojerez at riseup.net>
>> ---
>> .../state_trackers/clover/llvm/codegen/native.cpp | 8 +-
>> src/gallium/state_trackers/clover/llvm/compat.hpp | 109 +--------------------
>> .../state_trackers/clover/llvm/invocation.cpp | 22 +++--
>> .../state_trackers/clover/llvm/metadata.hpp | 30 +-----
>> 4 files changed, 20 insertions(+), 149 deletions(-)
>>
>> diff --git a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
>> index 12c83a92b6..38028597a3 100644
>> --- a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
>> +++ b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
>> @@ -114,7 +114,7 @@ namespace {
>>
>> std::unique_ptr<TargetMachine> tm {
>> t->createTargetMachine(target.triple, target.cpu, "", {},
>> - compat::default_reloc_model,
>> + ::llvm::None,
>> compat::default_code_model,
>> ::llvm::CodeGenOpt::Default) };
>> if (!tm)
>> @@ -124,11 +124,11 @@ namespace {
>> ::llvm::SmallVector<char, 1024> data;
>>
>> {
>> - compat::pass_manager pm;
>> + ::llvm::legacy::PassManager pm;
>> ::llvm::raw_svector_ostream os { data };
>> - compat::raw_ostream_to_emit_file fos(os);
>> + ::llvm::raw_svector_ostream &fos(os);
>>
>
> This is just a reference to the other local variable above. Mind
> cleaning it up?
>
>> - mod.setDataLayout(compat::get_data_layout(*tm));
>> + mod.setDataLayout(tm->createDataLayout());
>> tm->Options.MCOptions.AsmVerbose =
>> (ft == TargetMachine::CGFT_AssemblyFile);
>>
>> diff --git a/src/gallium/state_trackers/clover/llvm/compat.hpp b/src/gallium/state_trackers/clover/llvm/compat.hpp
>> index f8b56516d5..ce3a29f7d5 100644
>> --- a/src/gallium/state_trackers/clover/llvm/compat.hpp
>> +++ b/src/gallium/state_trackers/clover/llvm/compat.hpp
>> @@ -36,6 +36,8 @@
>>
>> #include "util/algorithm.hpp"
>>
>> +#include <llvm/Analysis/TargetLibraryInfo.h>
>> +#include <llvm/IR/LegacyPassManager.h>
>> #include <llvm/IR/LLVMContext.h>
>> #include <llvm/Linker/Linker.h>
>> #include <llvm/Transforms/IPO.h>
>> @@ -46,16 +48,6 @@
>> #include <llvm/Support/ErrorOr.h>
>> #endif
>>
>> -#if HAVE_LLVM >= 0x0307
>> -#include <llvm/IR/LegacyPassManager.h>
>> -#include <llvm/Analysis/TargetLibraryInfo.h>
>> -#else
>> -#include <llvm/PassManager.h>
>> -#include <llvm/Target/TargetLibraryInfo.h>
>> -#include <llvm/Target/TargetSubtargetInfo.h>
>> -#include <llvm/Support/FormattedStream.h>
>> -#endif
>> -
>> #include <clang/Basic/TargetInfo.h>
>> #include <clang/Frontend/CodeGenOptions.h>
>> #include <clang/Frontend/CompilerInstance.h>
>> @@ -63,12 +55,6 @@
>> namespace clover {
>> namespace llvm {
>> namespace compat {
>> -#if HAVE_LLVM >= 0x0307
>> - typedef ::llvm::TargetLibraryInfoImpl target_library_info;
>> -#else
>> - typedef ::llvm::TargetLibraryInfo target_library_info;
>> -#endif
>> -
>> #if HAVE_LLVM >= 0x0500
>> const auto lang_as_offset = 0;
>> const clang::InputKind ik_opencl = clang::InputKind::OpenCL;
>> @@ -77,19 +63,6 @@ namespace clover {
>> const clang::InputKind ik_opencl = clang::IK_OpenCL;
>> #endif
>>
>> - inline void
>> - set_lang_defaults(clang::CompilerInvocation &inv,
>> - clang::LangOptions &lopts, clang::InputKind ik,
>> - const ::llvm::Triple &t,
>> - clang::PreprocessorOptions &ppopts,
>> - clang::LangStandard::Kind std) {
>> -#if HAVE_LLVM >= 0x0309
>> - inv.setLangDefaults(lopts, ik, t, ppopts, std);
>> -#else
>> - inv.setLangDefaults(lopts, ik, std);
>> -#endif
>> - }
>> -
>> inline void
>> add_link_bitcode_file(clang::CodeGenOptions &opts,
>> const std::string &path) {
>> @@ -100,78 +73,8 @@ namespace clover {
>> F.PropagateAttrs = true;
>> F.LinkFlags = ::llvm::Linker::Flags::None;
>> opts.LinkBitcodeFiles.emplace_back(F);
>> -#elif HAVE_LLVM >= 0x0308
>> - opts.LinkBitcodeFiles.emplace_back(::llvm::Linker::Flags::None, path);
>> -#else
>> - opts.LinkBitcodeFile = path;
>> -#endif
>> - }
>> -
>> -#if HAVE_LLVM >= 0x0307
>> - typedef ::llvm::legacy::PassManager pass_manager;
>> -#else
>> - typedef ::llvm::PassManager pass_manager;
>> -#endif
>> -
>> - inline void
>> - add_data_layout_pass(pass_manager &pm) {
>> -#if HAVE_LLVM < 0x0307
>> - pm.add(new ::llvm::DataLayoutPass());
>> -#endif
>> - }
>> -
>> - inline void
>> - add_internalize_pass(pass_manager &pm,
>> - const std::vector<std::string> &names) {
>> -#if HAVE_LLVM >= 0x0309
>> - pm.add(::llvm::createInternalizePass(
>> - [=](const ::llvm::GlobalValue &gv) {
>> - return std::find(names.begin(), names.end(),
>> - gv.getName()) != names.end();
>> - }));
>> -#else
>> - pm.add(::llvm::createInternalizePass(std::vector<const char *>(
>> - map(std::mem_fn(&std::string::data), names))));
>> -#endif
>> - }
>> -
>> - inline std::unique_ptr< ::llvm::Linker>
>> - create_linker(::llvm::Module &mod) {
>> -#if HAVE_LLVM >= 0x0308
>> - return std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker(mod));
>> #else
>> - return std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker(&mod));
>> -#endif
>> - }
>> -
>> - inline bool
>> - link_in_module(::llvm::Linker &linker,
>> - std::unique_ptr< ::llvm::Module> mod) {
>> -#if HAVE_LLVM >= 0x0308
>> - return linker.linkInModule(std::move(mod));
>> -#else
>> - return linker.linkInModule(mod.get());
>> -#endif
>> - }
>> -
>> -#if HAVE_LLVM >= 0x0307
>> - typedef ::llvm::raw_svector_ostream &raw_ostream_to_emit_file;
>> -#else
>> - typedef ::llvm::formatted_raw_ostream raw_ostream_to_emit_file;
>> -#endif
>> -
>> -#if HAVE_LLVM >= 0x0307
>> - typedef ::llvm::DataLayout data_layout;
>> -#else
>> - typedef const ::llvm::DataLayout *data_layout;
>> -#endif
>> -
>> - inline data_layout
>> - get_data_layout(::llvm::TargetMachine &tm) {
>> -#if HAVE_LLVM >= 0x0307
>> - return tm.createDataLayout();
>> -#else
>> - return tm.getSubtargetImpl()->getDataLayout();
>> + opts.LinkBitcodeFiles.emplace_back(::llvm::Linker::Flags::None, path);
>> #endif
>> }
>>
>> @@ -181,12 +84,6 @@ namespace clover {
>> const auto default_code_model = ::llvm::CodeModel::Default;
>> #endif
>>
>> -#if HAVE_LLVM >= 0x0309
>> - const auto default_reloc_model = ::llvm::None;
>> -#else
>> - const auto default_reloc_model = ::llvm::Reloc::Default;
>> -#endif
>> -
>> template<typename M, typename F> void
>> handle_module_error(M &mod, const F &f) {
>> #if HAVE_LLVM >= 0x0400
>> diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
>> index a373df4eac..949a689d58 100644
>> --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
>> +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
>> @@ -125,7 +125,7 @@ namespace {
>> // http://www.llvm.org/bugs/show_bug.cgi?id=19735
>> c->getDiagnosticOpts().ShowCarets = false;
>>
>> - compat::set_lang_defaults(c->getInvocation(), c->getLangOpts(),
>> + c->getInvocation().setLangDefaults(c->getLangOpts(),
>> compat::ik_opencl, ::llvm::Triple(target.triple),
>> c->getPreprocessorOpts(),
>> clang::LangStandard::lang_opencl11);
>> @@ -223,9 +223,9 @@ namespace {
>> void
>> optimize(Module &mod, unsigned optimization_level,
>> bool internalize_symbols) {
>> - compat::pass_manager pm;
>> -
>> - compat::add_data_layout_pass(pm);
>> + ::llvm::legacy::PassManager pm;
>> + std::vector<std::string> names = map(std::mem_fn(&Function::getName),
>> + get_kernels(mod));
>
> Please, move this declaration into the 'if (internalize_symbols)'
> conditional where it's used, and declare as const.
>
>>
>> // By default, the function internalizer pass will look for a function
>> // called "main" and then mark all other functions as internal. Marking
>> @@ -240,12 +240,15 @@ namespace {
>> // treat the functions in the list as "main" functions and internalize
>> // all of the other functions.
>> if (internalize_symbols)
>> - compat::add_internalize_pass(pm, map(std::mem_fn(&Function::getName),
>> - get_kernels(mod)));
>> + pm.add(::llvm::createInternalizePass(
>> + [=](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 compat::target_library_info(
>> + pmb.LibraryInfo = new ::llvm::TargetLibraryInfoImpl(
>> ::llvm::Triple(mod.getTargetTriple()));
>> pmb.populateModulePassManager(pm);
>> pm.run(mod);
>> @@ -255,11 +258,10 @@ namespace {
>> link(LLVMContext &ctx, const clang::CompilerInstance &c,
>> const std::vector<module> &modules, std::string &r_log) {
>> std::unique_ptr<Module> mod { new Module("link", ctx) };
>> - auto linker = compat::create_linker(*mod);
>> + auto linker = std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker(*mod));
>>
>
> You can declare the pointer like 'std::unique_ptr< ::llvm::Linker>
> linker { ... }' as above.
>
>> for (auto &m : modules) {
>> - if (compat::link_in_module(*linker,
>> - parse_module_library(m, ctx, r_log)))
>> + if (linker->linkInModule(std::move(parse_module_library(m, ctx, r_log))))
>> throw build_error();
>> }
>>
>> diff --git a/src/gallium/state_trackers/clover/llvm/metadata.hpp b/src/gallium/state_trackers/clover/llvm/metadata.hpp
>> index 825008d497..bf8d9d5b06 100644
>> --- a/src/gallium/state_trackers/clover/llvm/metadata.hpp
>> +++ b/src/gallium/state_trackers/clover/llvm/metadata.hpp
>> @@ -57,44 +57,16 @@ namespace clover {
>>
>> inline bool
>> is_kernel(const ::llvm::Function &f) {
>> -#if HAVE_LLVM >= 0x0309
>> return f.getMetadata("kernel_arg_type");
>> -#else
>> - return clover::any_of(is_kernel_node_for(f),
>> - get_kernel_nodes(*f.getParent()));
>> -#endif
>> }
>>
>> inline iterator_range< ::llvm::MDNode::op_iterator>
>> get_kernel_metadata_operands(const ::llvm::Function &f,
>> const std::string &name) {
>> -#if HAVE_LLVM >= 0x0309
>> - // On LLVM v3.9+ kernel argument attributes are stored as
>> + // LLVM stores kernel argument attributes as
>> // function metadata.
>
> You can probably fit the whole comment into a single line now. With
> these nit-picks addressed:
>
> Reviewed-by: Francisco Jerez <currojerez at riseup.net>
>
Is it me, or this seems to have fallen through the cracks?
-Emil
More information about the mesa-dev
mailing list