[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