[Mesa-dev] clover: Implement linking of multiple CL programs.

Francisco Jerez currojerez at riseup.net
Mon Jul 4 00:51:09 UTC 2016

This series is the result of a long back and forth of patches between
Serge and me.  Most of the changes are already reviewed by either of
us, but I'm sending them again over the mailing list just in case
somebody else wants to give additional feedback.  Patches 1-30 are
mainly cleaning up and reworking the current LLVM interfacing
infrastructure in preparation for the following changes.  Patches
31-47 is where program compilation is actually split in two stages and
support for linking multiple CL programs into one executable binary is

You can find the same series in the clover-link-program branch of my
git tree:


[PATCH 01/47] clover: Bump required LLVM version to 3.6.
[PATCH 02/47] clover/llvm: Drop support for LLVM < 3.6.
[PATCH 03/47] clover/llvm: Drop dead code.
[PATCH 04/47] clover/llvm: Collect #ifdef mess into a separate file.
[PATCH 05/47] clover/llvm: Factor out target string parsing.
[PATCH 06/47] clover/llvm: Factor out compiler option tokenization.
[PATCH 07/47] clover/llvm: Refactor compiler instance initialization.
[PATCH 08/47] clover/llvm: Declare compiler instance at top level and pass down as argument.
[PATCH 09/47] clover/llvm: Factor out LLVM context init.
[PATCH 10/47] clover/llvm: Clean up compilation into LLVM IR.
[PATCH 11/47] clover/llvm: Trivial codestyle clean-up for optimize().
[PATCH 12/47] clover/llvm: Simplify diagnostic_handler().
[PATCH 13/47] clover/llvm: Use helper function to abort compilation with error message.
[PATCH 14/47] clover/llvm: Tidy debug handling.
[PATCH 15/47] clover/llvm: Move a bunch of utility functions into separate file.
[PATCH 16/47] clover/llvm: Clean up ELF parsing.
[PATCH 17/47] clover/llvm: Clean up compile_native().
[PATCH 18/47] clover/llvm: Factor out duplicated construction of clover::module.
[PATCH 19/47] clover/llvm: Fold compile_native() call into build_module_native().
[PATCH 20/47] clover/llvm: Clean up codestyle of get_kernel_args().
[PATCH 21/47] clover/llvm: Add simplified utility functions for metadata introspection.
[PATCH 22/47] clover/llvm: Use metadata introspection utils for kernel argument set-up.
[PATCH 23/47] clover/llvm: Use metadata introspection utils for kernel enumeration.
[PATCH 24/47] clover/llvm: Clean up bitcode codegen.
[PATCH 25/47] clover/llvm: Split native codegen and assembly print-out into separate functions.
[PATCH 26/47] clover/llvm: Define function for bitcode print-out.
[PATCH 27/47] clover/llvm: Split shared codegen support code into separate file.
[PATCH 28/47] clover/llvm: Split bitcode codegen into separate file.
[PATCH 29/47] clover/llvm: Split native codegen into separate file.
[PATCH 30/47] clover/llvm: Trivial assorted cleanups for invocation.cpp.
[PATCH 31/47] clover/llvm: Implement library bitcode codegen.
[PATCH 32/47] clover/llvm: Split compilation and linking.
[PATCH 33/47] clover/llvm: Implement linkage of multiple clover modules.
[PATCH 34/47] clover/llvm: Implement the -create-library linker option.
[PATCH 35/47] clover/tgsi: Move compiler entry point declaration into tgsi directory and namespace.
[PATCH 36/47] clover/tgsi: Add stub link_program() function.
[PATCH 37/47] clover: Override ret_object.
[PATCH 38/47] clover: Move back to using build_error to signal compilation failure.
[PATCH 39/47] clover: Define error subclass to signal build option parse failure.
[PATCH 40/47] clover: Change program::build opts argument to std::string.
[PATCH 41/47] clover: Unify program::build_* into a single method returning a struct.
[PATCH 42/47] clover: Provide separate program methods for compilation and linking.
[PATCH 43/47] clover/llvm: Get rid of compile_program_llvm().
[PATCH 44/47] clover/core: Remove compiler.hpp.
[PATCH 45/47] clover: Trivial cleanups for api/program.cpp.
[PATCH 46/47] clover: Add clLinkProgram (CL 1.2).
[PATCH 47/47] clover/api: Implement clLinkProgram per-device binary presence validation rule.

More information about the mesa-dev mailing list