…ailabl externally A workaround for https://github.com/llvm/llvm-project/issues/60996 As the title suggested, we can avoid emitting available externally functions which is marked as noinline already. Such functions should contribute nothing for optimizations. The update for docs will be sent seperately if this got approved.
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
// RUN: rm -rf %t
|
|
// RUN: split-file %s %t
|
|
// RUN: cd %t
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 -O1 -triple %itanium_abi_triple %t/a.cppm \
|
|
// RUN: -emit-module-interface -o %t/a.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -O1 -triple %itanium_abi_triple %t/b.cppm \
|
|
// RUN: -emit-module-interface -fprebuilt-module-path=%t -o %t/b.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -O1 -triple %itanium_abi_triple %t/c.cppm \
|
|
// RUN: -emit-module-interface -fprebuilt-module-path=%t -o %t/c.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -O1 -triple %itanium_abi_triple %t/c.pcm -S \
|
|
// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %t/c.cppm
|
|
|
|
//--- a.cppm
|
|
export module a;
|
|
export int a() {
|
|
return 43;
|
|
}
|
|
export __attribute__((noinline)) int a_noinline() {
|
|
return 44;
|
|
}
|
|
|
|
//--- b.cppm
|
|
export module b;
|
|
export import a;
|
|
export int b() {
|
|
return 43 + a();
|
|
}
|
|
|
|
export __attribute__((noinline)) int b_noinline() {
|
|
return 43 + a();
|
|
}
|
|
|
|
//--- c.cppm
|
|
export module c;
|
|
export import b;
|
|
export int c() {
|
|
return 43 + b() + a() + b_noinline() + a_noinline();
|
|
}
|
|
|
|
// CHECK: define{{.*}}available_externally{{.*}}@_ZW1b1bv(
|
|
// CHECK: define{{.*}}available_externally{{.*}}@_ZW1a1av(
|
|
|
|
// CHECK: declare{{.*}}@_ZW1b10b_noinlinev()
|
|
// CHECK: declare{{.*}}@_ZW1a10a_noinlinev()
|