[all-commits] [llvm/llvm-project] 4fbe33: [LTO] Make local linkage GlobalValue in non-prevai...
Fangrui Song via All-commits
all-commits at lists.llvm.org
Sat Oct 8 11:10:00 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 4fbe33593c8132fdc48647c06f4d1455bfff1c88
https://github.com/llvm/llvm-project/commit/4fbe33593c8132fdc48647c06f4d1455bfff1c88
Author: Fangrui Song <i at maskray.me>
Date: 2022-10-08 (Sat, 08 Oct 2022)
Changed paths:
M llvm/lib/LTO/LTO.cpp
M llvm/lib/Transforms/IPO/FunctionImport.cpp
M llvm/test/LTO/Resolution/X86/comdat-mixed-lto.ll
M llvm/test/ThinLTO/X86/Inputs/linkonce_resolution_comdat.ll
M llvm/test/ThinLTO/X86/linkonce_resolution_comdat.ll
Log Message:
-----------
[LTO] Make local linkage GlobalValue in non-prevailing COMDAT available_externally
See the updated linkonce_resolution_comdat.ll. For a local linkage GV in a
non-prevailing COMDAT, it remains defined while its leader has been made
available_externally. This violates the COMDAT rule that its members must be
retained or discarded as a unit.
To fix this, update the regular LTO change D34803 to track local linkage
GlobalValues, and port the code to ThinLTO (GlobalAliases are not handled.)
Fix https://github.com/llvm/llvm-project/issues/58215:
as a size optimization, we place private `__profd_` in a COMDAT with a
`__profc_` key. When FuncImport.cpp makes `__profc_` available_externally due to
a non-prevailing COMDAT, `__profd_` incorrectly remains private. This change
makes the `__profd_` available_externally.
```
cat > c.h <<'eof'
extern void bar();
inline __attribute__((noinline)) void foo() {}
eof
cat > m1.cc <<'eof'
#include "c.h"
int main() {
bar();
foo();
}
eof
cat > m2.cc <<'eof'
#include "c.h"
__attribute__((noinline)) void bar() {
foo();
}
eof
clang -O2 -fprofile-generate=./t m1.cc m2.cc -flto -fuse-ld=lld -o t_gen
rm -fr t && ./t_gen && llvm-profdata show -function=foo t/default_*.profraw
# one _Z3foov
clang -O2 -fprofile-generate=./t m1.cc m2.cc -flto=thin -fuse-ld=lld -o t_gen
rm -fr t && ./t_gen && llvm-profdata show -function=foo t/default_*.profraw
# one _Z3foov
```
Reviewed By: tejohnson
Differential Revision: https://reviews.llvm.org/D135427
More information about the All-commits
mailing list