[llvm] 434fed5 - [SampleFDO] Using common linkage for the discriminator flag variable

Rong Xu via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 15 14:54:51 PDT 2021


Author: Rong Xu
Date: 2021-06-15T14:51:27-07:00
New Revision: 434fed5aff5e62460e2e984c7cc2674c12779b1e

URL: https://github.com/llvm/llvm-project/commit/434fed5aff5e62460e2e984c7cc2674c12779b1e
DIFF: https://github.com/llvm/llvm-project/commit/434fed5aff5e62460e2e984c7cc2674c12779b1e.diff

LOG: [SampleFDO] Using common linkage for the discriminator flag variable

We create flag variable "__llvm_fs_discriminator__" in the binary
to indicate that FSAFDO hierarchical discriminators are used.

This variable might be GC'ed by the linker since it is not explicitly
reference. I initially added the var to the use list in pass
MIRFSDiscriminator but it did not work. It turned out the used global
list is collected in lowering (before MIR pass) and then emitted in
the end of pass pipeline.

In this patch, we use a "common" linkage for this variable so that
it will be GC'ed by the linker.

Differential Revision: https://reviews.llvm.org/D103988

Added: 
    

Modified: 
    llvm/lib/CodeGen/MIRFSDiscriminator.cpp
    llvm/test/CodeGen/X86/fsafdo_test1.ll
    llvm/test/CodeGen/X86/fsafdo_test2.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/MIRFSDiscriminator.cpp b/llvm/lib/CodeGen/MIRFSDiscriminator.cpp
index b8d7d300e1de..db399a36e3cf 100644
--- a/llvm/lib/CodeGen/MIRFSDiscriminator.cpp
+++ b/llvm/lib/CodeGen/MIRFSDiscriminator.cpp
@@ -132,9 +132,10 @@ bool MIRAddFSDiscriminators::runOnMachineFunction(MachineFunction &MF) {
     if (!M->getGlobalVariable(FSDiscriminatorVar)) {
       auto &Context = M->getContext();
       // Create a global variable to flag that FSDiscriminators are used.
-      new GlobalVariable(*M, Type::getInt1Ty(Context), true,
-                         GlobalValue::WeakAnyLinkage,
-                         ConstantInt::getTrue(Context), FSDiscriminatorVar);
+      // Using "common" linkage so that it will not gc GC'ed.
+      new GlobalVariable(*M, Type::getInt1Ty(Context), false,
+                         GlobalValue::CommonLinkage,
+                         ConstantInt::getFalse(Context), FSDiscriminatorVar);
     }
 
     LLVM_DEBUG(dbgs() << "Num of FS Discriminators: " << NumNewD << "\n");

diff  --git a/llvm/test/CodeGen/X86/fsafdo_test1.ll b/llvm/test/CodeGen/X86/fsafdo_test1.ll
index 99c65c917f69..af6c02725096 100644
--- a/llvm/test/CodeGen/X86/fsafdo_test1.ll
+++ b/llvm/test/CodeGen/X86/fsafdo_test1.ll
@@ -1,17 +1,13 @@
 ; RUN: llc -enable-fs-discriminator < %s | FileCheck %s
 ;
-; Check that fs-afdo discriminators are generated.
+;; Check that fs-afdo discriminators are generated.
 ; CHECK: .loc    1 7 3 is_stmt 0 discriminator 2 # foo.c:7:3
 ; Check: .loc    1 9 5 is_stmt 1 discriminator 2 # foo.c:9:5
 ; CHECK: .loc    1 9 5 is_stmt 0 discriminator 268435458 # foo.c:9:5
 ; CHECK: .loc    1 7 3 is_stmt 1 discriminator 3892314114 # foo.c:7:3
-; Check that variable __llvm_fs_discriminator__ is generated.
-; CHECK: .type   __llvm_fs_discriminator__, at object # @__llvm_fs_discriminator__
-; CHECK: .section        .rodata,"a", at progbits
-; CHECK: .weak   __llvm_fs_discriminator__
-; CHECK: __llvm_fs_discriminator__:
-; CHECK: .byte   1
-; CHECK: .size   __llvm_fs_discriminator__, 1
+;; Check that variable __llvm_fs_discriminator__ is generated.
+; CHECK: .type   __llvm_fs_discriminator__, at object
+; CHECK: .comm __llvm_fs_discriminator__,1,1
 
 target triple = "x86_64-unknown-linux-gnu"
 

diff  --git a/llvm/test/CodeGen/X86/fsafdo_test2.ll b/llvm/test/CodeGen/X86/fsafdo_test2.ll
index ca26f307b08b..07ea1be2463a 100644
--- a/llvm/test/CodeGen/X86/fsafdo_test2.ll
+++ b/llvm/test/CodeGen/X86/fsafdo_test2.ll
@@ -43,12 +43,8 @@
 ; CHECK: .loc    1 23 9 is_stmt 0 discriminator 3623878657 # unroll.c:23:9
 ;;
 ;; Check that variable __llvm_fs_discriminator__ is generated.
-; CHECK: .type   __llvm_fs_discriminator__, at object # @__llvm_fs_discriminator__
-; CHECK: .section        .rodata,"a", at progbits
-; CHECK: .weak   __llvm_fs_discriminator__
-; CHECK: __llvm_fs_discriminator__:
-; CHECK: .byte   1
-; CHECK: .size   __llvm_fs_discriminator__, 1
+; CHECK: .type   __llvm_fs_discriminator__, at object
+; CHECK: .comm __llvm_fs_discriminator__,1,1
 
 target triple = "x86_64-unknown-linux-gnu"
 


        


More information about the llvm-commits mailing list