[RFC][SPIR-V] Add linking of separate translation units using spirv-link


I would like to propose enabling linking functionality of SPIR-V object
files using spirv-link from the SPIRV-Tools project (https:
//github.com/KhronosGroup/SPIRV-Tools#linker). The initial patch is available
at ⚙ D116266 [SPIR-V] Add linking of separate translation units using spirv-link and it follows the conventional approach in
clang and therefore completes the SPIR-V Toolchain functionality.


clang --target=spirv64 file1.cl file2.cl

clang --target=spirv64 file1.cl -o file1.o
clang --target=spirv64 file1.o file2.cl -o all.out

Note that the implementation of linking phase is completely independent from
the SPIR-V binary generation phase and it applies to either mechanism that is
used to produce the SPIR-V binary format (internal backend or llvm-spirv tool)
as long as the binary is in the correct format. Similar to the use of other optional
linkers e.g. gold, this introduces a soft dependency on spirv-link for users of
the SPIR-V feature only. This is reflected in the clang documentation of the
proposed patch.

Comments and reviews are greatly appreciated!
Kind regards,