bd1976bris bbbbc093fe
[DTLTO][LLD][COFF] Add support for Integrated Distributed ThinLTO (#148594)
This patch introduces support for Integrated Distributed ThinLTO (DTLTO)
in COFF LLD.

DTLTO enables the distribution of ThinLTO backend compilations via
external distribution systems, such as Incredibuild, during the
traditional link step: https://llvm.org/docs/DTLTO.html.

Note: Bitcode members of non-thin archives are not currently supported.
This will be addressed in a future change. This patch is sufficient to
allow for self-hosting an LLVM build with DTLTO if thin archives are
used.

Testing:
- LLD `lit` test coverage has been added, using a mock distributor to
avoid requiring Clang.
- Cross-project `lit` tests cover integration with Clang.

For the design discussion of the DTLTO feature, see:
https://github.com/llvm/llvm-project/pull/126654
2025-07-20 14:47:00 +01:00

42 lines
1.3 KiB
C

// REQUIRES: lld-link
/// Simple test that DTLTO works with a single input bitcode file and that
/// --save-temps can be applied to the remote compilation.
// RUN: rm -rf %t && mkdir %t && cd %t
// RUN: %clang --target=x86_64-pc-windows-msvc -c -flto=thin %s -o dtlto.obj
// RUN: lld-link /subsystem:console /entry:_start dtlto.obj \
// RUN: -thinlto-distributor:%python \
// RUN: -thinlto-distributor-arg:%llvm_src_root/utils/dtlto/local.py \
// RUN: -thinlto-remote-compiler:%clang \
// RUN: -thinlto-remote-compiler-arg:--save-temps
/// Check that the required output files have been created.
// RUN: ls | sort | FileCheck %s
/// No files are expected before.
// CHECK-NOT: {{.}}
/// Linked ELF.
// CHECK: {{^}}dtlto.exe{{$}}
/// Produced by the bitcode compilation.
// CHECK-NEXT: {{^}}dtlto.obj{{$}}
/// --save-temps output for the backend compilation.
// CHECK-NEXT: {{^}}dtlto.s{{$}}
// CHECK-NEXT: {{^}}dtlto.s.0.preopt.bc{{$}}
// CHECK-NEXT: {{^}}dtlto.s.1.promote.bc{{$}}
// CHECK-NEXT: {{^}}dtlto.s.2.internalize.bc{{$}}
// CHECK-NEXT: {{^}}dtlto.s.3.import.bc{{$}}
// CHECK-NEXT: {{^}}dtlto.s.4.opt.bc{{$}}
// CHECK-NEXT: {{^}}dtlto.s.5.precodegen.bc{{$}}
// CHECK-NEXT: {{^}}dtlto.s.resolution.txt{{$}}
/// No files are expected after.
// CHECK-NOT: {{.}}
int _start() { return 0; }