[InstrProfiling] Use nobits as __llvm_prf_cnts section type in ELF

This can reduce the binary size because counters will no longer occupy
space in the binary, instead they will be allocated by dynamic linker.

Differential Revision: https://reviews.llvm.org/D97110
This commit is contained in:
Petr Hosek 2021-02-19 21:41:45 -08:00
parent 77056fe58e
commit 6b286d93f7
2 changed files with 19 additions and 0 deletions

View File

@ -440,6 +440,10 @@ static SectionKind getELFKindForNamedSection(StringRef Name, SectionKind K) {
Name == ".llvmbc" || Name == ".llvmcmd")
return SectionKind::getMetadata();
if (Name == getInstrProfSectionName(IPSK_cnts, Triple::ELF,
/*AddSegmentInfo=*/false))
return SectionKind::getBSS();
if (Name.empty() || Name[0] != '.') return K;
// Default implementation based on some magic section names.

View File

@ -0,0 +1,15 @@
;; Ensure that SHT_NOBITS section type is set for __llvm_prf_cnts in ELF.
; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
@__profc_foo = hidden global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", align 8
define void @foo() {
%pgocount = load i64, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc_foo, i64 0, i64 0), align 4
%1 = add i64 %pgocount, 1
store i64 %1, i64* getelementptr inbounds ([1 x i64], [1 x i64]* @__profc_foo, i64 0, i64 0), align 4
ret void
}
declare void @llvm.instrprof.increment(i8*, i64, i32, i32)
; CHECK: .section __llvm_prf_cnts,"aw",@nobits