[llvm] 6b286d9 - [InstrProfiling] Use nobits as __llvm_prf_cnts section type in ELF

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 20 14:25:25 PST 2021


Author: Petr Hosek
Date: 2021-02-20T14:20:33-08:00
New Revision: 6b286d93f7ec8518c685a302269e44b06a0a24f3

URL: https://github.com/llvm/llvm-project/commit/6b286d93f7ec8518c685a302269e44b06a0a24f3
DIFF: https://github.com/llvm/llvm-project/commit/6b286d93f7ec8518c685a302269e44b06a0a24f3.diff

LOG: [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

Added: 
    llvm/test/Instrumentation/InstrProfiling/X86/nobits.ll

Modified: 
    llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 2530fdc90378..c1383ba61c80 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -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.

diff  --git a/llvm/test/Instrumentation/InstrProfiling/X86/nobits.ll b/llvm/test/Instrumentation/InstrProfiling/X86/nobits.ll
new file mode 100644
index 000000000000..d8cbc76c8671
--- /dev/null
+++ b/llvm/test/Instrumentation/InstrProfiling/X86/nobits.ll
@@ -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
+
+ at __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", at nobits


        


More information about the llvm-commits mailing list