================ @@ -0,0 +1,97 @@ +// This is a regression test for ThinLTO indirect-call-promotion when candidate +// callees need to be imported from another IR module. In the C++ test case, +// `main` calls `global_func` which is defined in another module. `global_func` +// has two indirect callees, one has external linkage and one has local linkage. +// All three functions should be imported into the IR module of main. + +// What the test does: +// - Generate raw profiles from executables and convert it to indexed profiles. +// During the conversion, a profiled callee address in raw profiles will be +// converted to function hash in indexed profiles. +// - Run IRPGO profile use and ThinTLO prelink pipeline and get LLVM bitcodes +// for both cpp files in the C++ test case. +// - Generate ThinLTO summary file with LLVM bitcodes, and run `function-import` pass. +// - Run `pgo-icall-prom` pass for the IR module which needs to import callees. + +// RUN: rm -rf %t && split-file %s %t && cd %t + +// Use clang*_{pgogen,pgouse} for IR level instrumentation, and use clangxx* for +// C++. +// +// Do setup work for all below tests. +// Generate raw profiles from real programs and convert it into indexed profiles. +// RUN: %clangxx_pgogen -fuse-ld=lld -O2 lib.cpp main.cpp -o main ---------------- MaskRay wrote:
If the default linker is GNU ld or gold, LLVMgold.so is needed to use LTO. LLVMgold.so is disabled for some builds, so we still need a `REQUIRES`. I think it is more robust to just require `// REQUIRES: lld-available` and use `-fuse-ld=lld`. https://github.com/llvm/llvm-project/pull/74008 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits