Author: Sriraman Tallam
Date: 2020-12-23T11:35:44-08:00
New Revision: 34e70d722dfd0e73d460802e8d43d3a885d24784

URL: 
https://github.com/llvm/llvm-project/commit/34e70d722dfd0e73d460802e8d43d3a885d24784
DIFF: 
https://github.com/llvm/llvm-project/commit/34e70d722dfd0e73d460802e8d43d3a885d24784.diff

LOG: Append ".__part." to every basic block section symbol.

Every basic block section symbol created by -fbasic-block-sections will contain
".__part." to know that this symbol corresponds to a basic block fragment of
the function.

This patch solves two problems:

a) Like D89617, we want function symbols with suffixes to be properly qualified
   so that external tools like profile aggregators know exactly what this
   symbol corresponds to.
b) The current basic block naming just adds a ".N" to the symbol name where N is
   some integer. This collides with how clang creates __cxx_global_var_init.N.
   clang creates these symbol names to call constructor functions and basic
   block symbol naming should not use the same style.

Fixed all the test cases and added an extra test for __cxx_global_var_init
breakage.

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

Added: 
    llvm/test/CodeGen/X86/basic-block-sections_2.ll

Modified: 
    clang/test/CodeGen/basic-block-sections.c
    lld/test/ELF/lto/basic-block-sections.ll
    llvm/lib/CodeGen/MachineBasicBlock.cpp
    llvm/test/CodeGen/X86/basic-block-sections-blockaddress-taken.ll
    llvm/test/CodeGen/X86/basic-block-sections-clusters-branches.ll
    llvm/test/CodeGen/X86/basic-block-sections-clusters-eh.ll
    llvm/test/CodeGen/X86/basic-block-sections-clusters.ll
    llvm/test/CodeGen/X86/basic-block-sections-directjumps.ll
    llvm/test/CodeGen/X86/basic-block-sections-eh.ll
    llvm/test/CodeGen/X86/basic-block-sections-list.ll
    llvm/test/CodeGen/X86/basic-block-sections-listbb.ll
    llvm/test/CodeGen/X86/basic-block-sections-mir-parse.mir
    llvm/test/CodeGen/X86/basic-block-sections-unreachable.ll
    llvm/test/CodeGen/X86/basic-block-sections.ll
    llvm/test/CodeGen/X86/cfi-basic-block-sections-1.ll
    
llvm/test/CodeGen/X86/cfi-inserter-basic-block-sections-callee-save-registers.ll
    llvm/test/CodeGen/X86/gcc_except_table_bb_sections.ll
    llvm/test/DebugInfo/X86/basic-block-sections_1.ll

Removed: 
    


################################################################################
diff  --git a/clang/test/CodeGen/basic-block-sections.c 
b/clang/test/CodeGen/basic-block-sections.c
index 805539f06f08..70cdeeebb0d3 100644
--- a/clang/test/CodeGen/basic-block-sections.c
+++ b/clang/test/CodeGen/basic-block-sections.c
@@ -31,14 +31,14 @@ int another(int a) {
 // BB_WORLD: .section .text.world,"ax",@progbits{{$}}
 // BB_WORLD: world:
 // BB_WORLD: .section .text.world,"ax",@progbits,unique
-// BB_WORLD: world.1:
+// BB_WORLD: world.__part.1:
 // BB_WORLD: .section .text.another,"ax",@progbits
 // BB_ALL: .section .text.another,"ax",@progbits,unique
-// BB_ALL: another.1:
+// BB_ALL: another.__part.1:
 // BB_LIST-NOT: .section .text.another,"ax",@progbits,unique
 // BB_LIST: another:
-// BB_LIST-NOT: another.1:
+// BB_LIST-NOT: another.__part.1:
 //
-// UNIQUE: .section .text.world.world.1,
-// UNIQUE: .section .text.another.another.1,
+// UNIQUE: .section .text.world.world.__part.1,
+// UNIQUE: .section .text.another.another.__part.1,
 // ERROR: error:  unable to load basic block sections function list: 
'{{[Nn]}}o such file or directory'

diff  --git a/lld/test/ELF/lto/basic-block-sections.ll 
b/lld/test/ELF/lto/basic-block-sections.ll
index 1f932ac50a87..35b638ac488a 100644
--- a/lld/test/ELF/lto/basic-block-sections.ll
+++ b/lld/test/ELF/lto/basic-block-sections.ll
@@ -11,12 +11,12 @@
 ; SECNAMES: Name: .text.foo {{.*}}
 
 ; SECNAMES-FULL: Name: .text.foo {{.*}}
-; SECNAMES-FULL: Name: .text.foo.foo.1 {{.*}}
-; SECNAMES-FULL: Name: .text.foo.foo.2 {{.*}}
+; SECNAMES-FULL: Name: .text.foo.foo.__part.1 {{.*}}
+; SECNAMES-FULL: Name: .text.foo.foo.__part.2 {{.*}}
 
 ; SYMS: foo
-; SYMS: foo.1
-; SYMS: foo.2
+; SYMS: foo.__part.1
+; SYMS: foo.__part.2
 
 target datalayout = 
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"

diff  --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp 
b/llvm/lib/CodeGen/MachineBasicBlock.cpp
index 0278999a8f72..14a270f994b4 100644
--- a/llvm/lib/CodeGen/MachineBasicBlock.cpp
+++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp
@@ -71,7 +71,10 @@ MCSymbol *MachineBasicBlock::getSymbol() const {
       } else if (SectionID == MBBSectionID::ExceptionSectionID) {
         Suffix += ".eh";
       } else {
-        Suffix += "." + std::to_string(SectionID.Number);
+        // For symbols that represent basic block sections, we add ".__part." 
to
+        // allow tools like symbolizers to know that this represents a part of
+        // the original function.
+        Suffix = (Suffix + Twine(".__part.") + Twine(SectionID.Number)).str();
       }
       CachedMCSymbol = Ctx.getOrCreateSymbol(MF->getName() + Suffix);
     } else {

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-blockaddress-taken.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-blockaddress-taken.ll
index aaae1cf2a942..4957916ddc99 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-blockaddress-taken.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-blockaddress-taken.ll
@@ -18,7 +18,7 @@ bb1:                                                ; preds = 
%entry
   ret void
 ; CHECK:         .section .text,"ax",@progbits,unique,1
 ; CHECK-NEXT:  .Ltmp0:
-; CHECK-NEXT:  foo.1
+; CHECK-NEXT:  foo.__part.1
 ; CHECK-NEXT:    callq   bar
 ;
 
@@ -27,7 +27,7 @@ bb2:                                                ; preds = 
%entry
   ret void
 ; CHECK:         .section .text,"ax",@progbits,unique,2
 ; CHECK-NEXT:  .Ltmp1:
-; CHECK-NEXT:  foo.2
+; CHECK-NEXT:  foo.__part.2
 ; CHECK-NEXT:    callq   baz
 }
 

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-clusters-branches.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-clusters-branches.ll
index 914ebd0cff7a..1cf8ac17ea21 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-clusters-branches.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-clusters-branches.ll
@@ -43,23 +43,23 @@ declare i32 @baz() #1
 
 ; LINUX-SECTIONS1:             .section        .text.foo,"ax",@progbits
 ; LINUX-SECTIONS1-LABEL:       foo:
-; LINUX-SECTIONS1:             jne foo.1
+; LINUX-SECTIONS1:             jne foo.__part.1
 ; LINUX-SECTIONS1-NOT:         {{jne|je|jmp}}
 ; LINUX-SECTIONS1-LABEL:       # %bb.2:
 ; LINUX-SECTIONS1:             jmp foo.cold
 ; LINUX-SECTIONS1:             .section        
.text.foo,"ax",@progbits,unique,1
-; LINUX-SECTIONS1-LABEL:       foo.1:
+; LINUX-SECTIONS1-LABEL:       foo.__part.1:
 ; LINUX-SECTIONS1:             jmp foo.cold
 ; LINUX-SECTIONS1:             .section        .text.split.foo,"ax",@progbits
 ; LINUX-SECTIONS1-LABEL:       foo.cold:
 
 ; LINUX-SECTIONS2:             .section        .text.foo,"ax",@progbits
 ; LINUX-SECTIONS2-LABEL:       foo:
-; LINUX-SECTIONS2:             jne foo.0
+; LINUX-SECTIONS2:             jne foo.__part.0
 ; LINUX-SECTIONS2-NOT:         {{jne|je|jmp}}
 ; LINUX-SECTIONS2-LABEL:       # %bb.2:
 ; LINUX-SECTIONS2:             jmp .LBB0_3
 ; LINUX-SECTIONS2:             .section        
.text.foo,"ax",@progbits,unique,1
-; LINUX-SECTIONS2:             foo.0:
+; LINUX-SECTIONS2:             foo.__part.0:
 ; LINUX-SECTIONS2-NOT:         {{jne|je|jmp}}
 ; LINUX-SECTIONS2:             .LBB0_3:

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-clusters-eh.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-clusters-eh.ll
index 4e80c72f1103..fe53b1290a1b 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-clusters-eh.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-clusters-eh.ll
@@ -60,7 +60,7 @@ declare i32 @__gxx_personality_v0(...)
 ; LINUX-SECTIONS1-NOT:                 .section
 ; LINUX-SECTIONS1-LABEL:       .LBB0_6:
 ; LINUX-SECTIONS1:             .section        
.text.main,"ax",@progbits,unique,1
-; LINUX-SECTIONS1-LABEL:       main.0:
+; LINUX-SECTIONS1-LABEL:       main.__part.0:
 ; LINUX-SECTIONS1:             .section        .text.eh.main,"ax",@progbits
 ; LINUX-SECTIONS1-LABEL:       main.eh:
 ; LINUX-SECTIONS1-NOT:                 .section
@@ -79,7 +79,7 @@ declare i32 @__gxx_personality_v0(...)
 ; LINUX-SECTIONS2-NOT:                 .section
 ; LINUX-SECTIONS2-LABEL:       .LBB0_6:
 ; LINUX-SECTIONS2:             .section        
.text.main,"ax",@progbits,unique,1
-; LINUX-SECTIONS2-LABEL:       main.0:
+; LINUX-SECTIONS2-LABEL:       main.__part.0:
 ; LINUX-SECTIONS2-NOT:                 .section
 ; LINUX-SECTIONS2-LABEL:       .LBB0_2:
 ; LINUX-SECTIONS2-NOT:                 .section

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-clusters.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-clusters.ll
index ce0e7589c096..c133653f9a03 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-clusters.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-clusters.ll
@@ -46,9 +46,9 @@ declare i32 @baz() #1
 ; LINUX-SECTIONS1-LABEL:       # %bb.2:
 ; LINUX-SECTIONS1-NOT:         .LBB_END0_{{0-9}}+
 ; LINUX-SECTIONS1:             .section        
.text.foo,"ax",@progbits,unique,1
-; LINUX-SECTIONS1-LABEL:       foo.1:
+; LINUX-SECTIONS1-LABEL:       foo.__part.1:
 ; LINUX-SECTIONS1-LABEL:       .LBB_END0_1:
-; LINUX-SECTIONS1-NEXT:        .size   foo.1, .LBB_END0_1-foo.1
+; LINUX-SECTIONS1-NEXT:        .size   foo.__part.1, .LBB_END0_1-foo.__part.1
 ; LINUX-SECTIONS1-NOT:         .section
 ; LINUX-SECTIONS1:             .section        .text.split.foo,"ax",@progbits
 ; LINUX-SECTIONS1-LABEL:       foo.cold:
@@ -66,12 +66,12 @@ declare i32 @baz() #1
 ; LINUX-SECTIONS2-LABEL:       # %bb.2:
 ; LINUX-SECTIONS2-NOT:         .LBB_END0_{{0-9}}+
 ; LINUX-SECTIONS2:             .section        
.text.foo,"ax",@progbits,unique,1
-; LINUX-SECTIONS2-NEXT:                foo.0:
+; LINUX-SECTIONS2-NEXT:                foo.__part.0:
 ; LINUX-SECTIONS2-NOT:         .LBB_END0_{{0-9}}+
 ; LINUX-SECTIONS2-NOT:         .section
 ; LINUX-SECTIONS2-LABEL:       .LBB0_3:
 ; LINUX-SECTIONS2-LABEL:       .LBB_END0_3:
-; LINUX-SECTIONS2-NEXT:        .size   foo.0, .LBB_END0_3-foo.0
+; LINUX-SECTIONS2-NEXT:        .size   foo.__part.0, .LBB_END0_3-foo.__part.0
 ; LINUX-SECTIONS2:             .section        .text.foo,"ax",@progbits
 ; LINUX-SECTIONS2-NOT:         .LBB_END0_{{0-9}}+
 ; LINUX-SECTIONS2-LABEL:       .Lfunc_end0:

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-directjumps.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-directjumps.ll
index 99a64ef13031..4acaffff11d8 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-directjumps.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-directjumps.ll
@@ -29,10 +29,10 @@ declare i32 @_Z3foov() #1
 
 ; LINUX-SECTIONS: .section        .text._Z3bazb,"ax",@progbits
 ; LINUX-SECTIONS: _Z3bazb:
-; LINUX-SECTIONS: jmp _Z3bazb.1
-; LINUX-SECTIONS: .section        .text._Z3bazb._Z3bazb.1,"ax",@progbits
-; LINUX-SECTIONS: _Z3bazb.1:
-; LINUX-SECTIONS: jmp _Z3bazb.2
-; LINUX-SECTIONS: .section        .text._Z3bazb._Z3bazb.2,"ax",@progbits
-; LINUX-SECTIONS: _Z3bazb.2:
-; LINUX-SECTIONS: jmp _Z3bazb.3
+; LINUX-SECTIONS: jmp _Z3bazb.__part.1
+; LINUX-SECTIONS: .section        .text._Z3bazb._Z3bazb.__part.1,"ax",@progbits
+; LINUX-SECTIONS: _Z3bazb.__part.1:
+; LINUX-SECTIONS: jmp _Z3bazb.__part.2
+; LINUX-SECTIONS: .section        .text._Z3bazb._Z3bazb.__part.2,"ax",@progbits
+; LINUX-SECTIONS: _Z3bazb.__part.2:
+; LINUX-SECTIONS: jmp _Z3bazb.__part.3

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-eh.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-eh.ll
index f12e0fd386a0..743ffa3ad336 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-eh.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-eh.ll
@@ -80,6 +80,6 @@ declare void @__cxa_end_catch()
 
 ;LINUX-SECTIONS: .section      .text._Z3foob,"ax",@progbits
 ;LINUX-SECTIONS: _Z3foob:
-;LINUX-SECTIONS: .section       .text._Z3foob._Z3foob.{{[0-9]+}},"ax",@progbits
-;LINUX-SECTIONS-LABEL: _Z3foob.{{[0-9]+}}:
+;LINUX-SECTIONS: .section       
.text._Z3foob._Z3foob.__part.{{[0-9]+}},"ax",@progbits
+;LINUX-SECTIONS-LABEL: _Z3foob.__part.{{[0-9]+}}:
 ;LINUX-SECTIONS:        calll   __cxa_begin_catch

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-list.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-list.ll
index 7c48628f73a8..8d788ffb1234 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-list.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-list.ll
@@ -59,14 +59,14 @@ define i32 @_Z3zipb(i1 zeroext %0) nounwind {
 
 ; LINUX-SECTIONS: .section        .text._Z3foob,"ax",@progbits
 ; LINUX-SECTIONS: _Z3foob:
-; LINUX-SECTIONS: .section        .text._Z3foob._Z3foob.1,"ax",@progbits
-; LINUX-SECTIONS: _Z3foob.1:
-; LINUX-SECTIONS: .section        .text._Z3foob._Z3foob.2,"ax",@progbits
-; LINUX-SECTIONS: _Z3foob.2:
-; LINUX-SECTIONS: .section        .text._Z3foob._Z3foob.3,"ax",@progbits
-; LINUX-SECTIONS: _Z3foob.3:
+; LINUX-SECTIONS: .section        .text._Z3foob._Z3foob.__part.1,"ax",@progbits
+; LINUX-SECTIONS: _Z3foob.__part.1:
+; LINUX-SECTIONS: .section        .text._Z3foob._Z3foob.__part.2,"ax",@progbits
+; LINUX-SECTIONS: _Z3foob.__part.2:
+; LINUX-SECTIONS: .section        .text._Z3foob._Z3foob.__part.3,"ax",@progbits
+; LINUX-SECTIONS: _Z3foob.__part.3:
 
 ; LINUX-SECTIONS: .section        .text._Z3zipb,"ax",@progbits
 ; LINUX-SECTIONS: _Z3zipb:
-; LINUX-SECTIONS-NOT: .section        
.text._Z3zipb._Z3zipb.{{[0-9]+}},"ax",@progbits
-; LINUX-SECTIONS-NOT: _Z3zipb.{{[0-9]+}}:
+; LINUX-SECTIONS-NOT: .section        
.text._Z3zipb._Z3zipb.__part.{{[0-9]+}},"ax",@progbits
+; LINUX-SECTIONS-NOT: _Z3zipb.__part.{{[0-9]+}}:

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-listbb.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-listbb.ll
index 53bf56e67fe5..fd6522236987 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-listbb.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-listbb.ll
@@ -33,10 +33,10 @@ declare i32 @_Z3foov() #1
 ; LINUX-SECTIONS: .section        .text._Z3bazb,"ax",@progbits
 ; LINUX-SECTIONS: _Z3bazb:
 ; Check that the basic block with id 1 doesn't get a section.
-; LINUX-SECTIONS-NOT: .section        
.text._Z3bazb._Z3bazb.{{[0-9]+}},"ax",@progbits
+; LINUX-SECTIONS-NOT: .section        
.text._Z3bazb._Z3bazb.__part.{{[0-9]+}},"ax",@progbits
 ; LINUX-SECTIONS-LABEL: # %bb.1:
 ; LINUX-SECTIONS-NEXT:        callq   _Z3barv
-; LINUX-SECTIONS: .section        
.text._Z3bazb.[[SECTION_LABEL:_Z3bazb.[0-9]+]],"ax",@progbits
+; LINUX-SECTIONS: .section        
.text._Z3bazb.[[SECTION_LABEL:_Z3bazb.__part.[0-9]+]],"ax",@progbits
 ; LINUX-SECTIONS-NEXT: [[SECTION_LABEL]]:
 ; LINUX-SECTIONS-NEXT:        callq   _Z3foov
 ; LINUX-SECTIONS: .LBB_END0_2:

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-mir-parse.mir 
b/llvm/test/CodeGen/X86/basic-block-sections-mir-parse.mir
index a4219fa1509d..6a2cee05ec88 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-mir-parse.mir
+++ b/llvm/test/CodeGen/X86/basic-block-sections-mir-parse.mir
@@ -124,8 +124,8 @@ body:             |
 
 # CHECK: _Z3foob:
 # CHECK: .section      .text,"ax",@progbits,unique
-# CHECK: _Z3foob.1:
+# CHECK: _Z3foob.__part.1:
 # CHECK: .section      .text,"ax",@progbits,unique
-# CHECK: _Z3foob.2:
+# CHECK: _Z3foob.__part.2:
 # CHECK: .section      .text,"ax",@progbits,unique
-# CHECK: _Z3foob.3:
+# CHECK: _Z3foob.__part.3:

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections-unreachable.ll 
b/llvm/test/CodeGen/X86/basic-block-sections-unreachable.ll
index 6501d7ba44ec..8c77070a0278 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-unreachable.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-unreachable.ll
@@ -14,5 +14,5 @@ default:
   unreachable
 ; CHECK-NOSECTIONS:     # %bb.2:     # %default
 ; CHECK-SECTIONS:       .section .text,"ax",@progbits,unique,2
-; CHECK-SECTIONS-NEXT:  foo.2:       # %default
+; CHECK-SECTIONS-NEXT:  foo.__part.2:       # %default
 }

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections.ll 
b/llvm/test/CodeGen/X86/basic-block-sections.ll
index 81bb5d5b4c91..7b93076eb434 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections.ll
@@ -28,11 +28,11 @@ declare i32 @_Z3foov() #1
 
 ; LINUX-SECTIONS: .section        .text._Z3bazb,"ax",@progbits
 ; LINUX-SECTIONS: _Z3bazb:
-; LINUX-SECTIONS: .section        .text._Z3bazb._Z3bazb.1,"ax",@progbits
-; LINUX-SECTIONS: _Z3bazb.1:
+; LINUX-SECTIONS: .section        
.text._Z3bazb.[[SECTION_LABEL_1:_Z3bazb.__part.[0-9]+]],"ax",@progbits
+; LINUX-SECTIONS: [[SECTION_LABEL_1]]:
 ; LINUX-SECTIONS: .LBB_END0_1:
-; LINUX-SECTIONS-NEXT: .size   _Z3bazb.1, .LBB_END0_1-_Z3bazb.1
-; LINUX-SECTIONS: .section        .text._Z3bazb._Z3bazb.2,"ax",@progbits
-; LINUX-SECTIONS: _Z3bazb.2:
+; LINUX-SECTIONS-NEXT: .size  [[SECTION_LABEL_1]], 
.LBB_END0_1-[[SECTION_LABEL_1]]
+; LINUX-SECTIONS: .section        
.text._Z3bazb.[[SECTION_LABEL_2:_Z3bazb.__part.[0-9]+]],"ax",@progbits
+; LINUX-SECTIONS: [[SECTION_LABEL_2]]:
 ; LINUX-SECTIONS: .LBB_END0_2:
-; LINUX-SECTIONS-NEXT: .size   _Z3bazb.2, .LBB_END0_2-_Z3bazb.2
+; LINUX-SECTIONS-NEXT: .size   [[SECTION_LABEL_2]], 
.LBB_END0_2-[[SECTION_LABEL_2]]

diff  --git a/llvm/test/CodeGen/X86/basic-block-sections_2.ll 
b/llvm/test/CodeGen/X86/basic-block-sections_2.ll
new file mode 100644
index 000000000000..66c4c5afe729
--- /dev/null
+++ b/llvm/test/CodeGen/X86/basic-block-sections_2.ll
@@ -0,0 +1,61 @@
+; Check that the basic block sections suffix naming does not conflict with 
__cxx_global_var_init.N naming.
+; How to  generate this file:
+;; class A {
+;;  public:
+;;    A(bool a) { }
+;; };
+;;
+;; extern bool bar(int);
+;; A g_a(bar(5) ? bar(3) : false), g_b(true);
+;;
+;; $ clang -O1 -emit-llvm -S
+;;
+; __cxx_global_var_init has multiple basic blocks which will produce many 
sections.
+; RUN: llc < %s -mtriple=x86_64-pc-linux -function-sections 
-basic-block-sections=all -unique-basic-block-section-names | FileCheck %s
+
+; CHECK-LABEL: __cxx_global_var_init:
+; CHECK-LABEL: __cxx_global_var_init.__part.1:
+; CHECK-LABEL: __cxx_global_var_init.1:
+
+%class.A = type { i8 }
+
+$_ZN1AC2Eb = comdat any
+
+@g_a = dso_local global %class.A zeroinitializer, align 1
+@g_b = dso_local global %class.A zeroinitializer, align 1
+@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, 
void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_symcollision.cc, i8* null 
}]
+
+define internal fastcc void @__cxx_global_var_init() unnamed_addr section 
".text.startup" {
+entry:
+  %call = call zeroext i1 @_Z3bari(i32 5)
+  br i1 %call, label %cond.true, label %cond.end
+
+cond.true:                                        ; preds = %entry
+  %call1 = call zeroext i1 @_Z3bari(i32 3)
+  br label %cond.end
+
+cond.end:                                         ; preds = %entry, %cond.true
+  %cond = phi i1 [ %call1, %cond.true ], [ false, %entry ]
+  call void @_ZN1AC2Eb(%class.A* nonnull @g_a, i1 zeroext %cond)
+  ret void
+}
+
+declare dso_local zeroext i1 @_Z3bari(i32) local_unnamed_addr
+
+define linkonce_odr dso_local void @_ZN1AC2Eb(%class.A* %this, i1 zeroext %a) 
unnamed_addr comdat align 2 {
+entry:
+  ret void
+}
+
+define internal fastcc void @__cxx_global_var_init.1() unnamed_addr  section 
".text.startup" {
+entry:
+  call void @_ZN1AC2Eb(%class.A* nonnull @g_b, i1 zeroext true)
+  ret void
+}
+
+define internal void @_GLOBAL__sub_I_symcollision.cc()  section 
".text.startup" {
+entry:
+  call fastcc void @__cxx_global_var_init()
+  call fastcc void @__cxx_global_var_init.1()
+  ret void
+}

diff  --git a/llvm/test/CodeGen/X86/cfi-basic-block-sections-1.ll 
b/llvm/test/CodeGen/X86/cfi-basic-block-sections-1.ll
index a5a6d697451f..6010c629c010 100644
--- a/llvm/test/CodeGen/X86/cfi-basic-block-sections-1.ll
+++ b/llvm/test/CodeGen/X86/cfi-basic-block-sections-1.ll
@@ -16,13 +16,13 @@
 ; SECTIONS_CFI: .cfi_def_cfa_register %rbp
 ; SECTIONS_CFI: .cfi_endproc
 
-; SECTIONS_CFI: _Z2f3b.1:
+; SECTIONS_CFI: _Z2f3b.__part.1:
 ; SECTIONS_CFI-NEXT: .cfi_startproc
 ; SECTIONS_CFI-NEXT: .cfi_def_cfa %rbp, 16
 ; SECTIONS_CFI-NEXT: .cfi_offset %rbp, -16
 ; SECTIONS_CFI: .cfi_endproc
 
-; SECTIONS_CFI: _Z2f3b.2:
+; SECTIONS_CFI: _Z2f3b.__part.2:
 ; SECTIONS_CFI-NEXT: .cfi_startproc
 ; SECTIONS_CFI-NEXT: .cfi_def_cfa %rbp, 16
 ; SECTIONS_CFI-NEXT: .cfi_offset %rbp, -16
@@ -35,12 +35,12 @@
 ; SECTIONS_NOFP_CFI: .cfi_def_cfa_offset 16
 ; SECTIONS_NOFP_CFI: .cfi_endproc
 
-; SECTIONS_NOFP_CFI: _Z2f3b.1:
+; SECTIONS_NOFP_CFI: _Z2f3b.__part.1:
 ; SECTIONS_NOFP_CFI-NEXT: .cfi_startproc
 ; SECTIONS_NOFP_CFI-NEXT: .cfi_def_cfa %rsp, 16
 ; SECTIONS_NOFP_CFI: .cfi_endproc
 
-; SECTIONS_NOFP_CFI: _Z2f3b.2:
+; SECTIONS_NOFP_CFI: _Z2f3b.__part.2:
 ; SECTIONS_NOFP_CFI-NEXT: .cfi_startproc
 ; SECTIONS_NOFP_CFI-NEXT: .cfi_def_cfa %rsp, 16
 ; SECTIONS_NOFP_CFI: .cfi_endproc

diff  --git 
a/llvm/test/CodeGen/X86/cfi-inserter-basic-block-sections-callee-save-registers.ll
 
b/llvm/test/CodeGen/X86/cfi-inserter-basic-block-sections-callee-save-registers.ll
index d87ead0e864c..2b207e8ae9ef 100644
--- 
a/llvm/test/CodeGen/X86/cfi-inserter-basic-block-sections-callee-save-registers.ll
+++ 
b/llvm/test/CodeGen/X86/cfi-inserter-basic-block-sections-callee-save-registers.ll
@@ -10,7 +10,7 @@
 ; SECTIONS_CFI-NEXT: .cfi_offset [[RD:%r.+]], -32
 ; SECTIONS_CFI-NEXT: .cfi_offset [[RE:%r.+]], -24
 
-; SECTIONS_CFI:      _Z3foob.1:
+; SECTIONS_CFI:      _Z3foob.__part.1:
 ; SECTIONS_CFI:      .cfi_offset %rbp, -16
 ; SECTIONS_CFI:      .cfi_offset [[RA]], -56
 ; SECTIONS_CFI-NEXT: .cfi_offset [[RB]], -48
@@ -18,7 +18,7 @@
 ; SECTIONS_CFI-NEXT: .cfi_offset [[RD]], -32
 ; SECTIONS_CFI-NEXT: .cfi_offset [[RE]], -24
 
-; SECTIONS_CFI:      _Z3foob.2:
+; SECTIONS_CFI:      _Z3foob.__part.2:
 ; SECTIONS_CFI:      .cfi_offset %rbp, -16
 ; SECTIONS_CFI:      .cfi_offset [[RA]], -56
 ; SECTIONS_CFI-NEXT: .cfi_offset [[RB]], -48

diff  --git a/llvm/test/CodeGen/X86/gcc_except_table_bb_sections.ll 
b/llvm/test/CodeGen/X86/gcc_except_table_bb_sections.ll
index ce0cc55b54e3..e0aae5be7c39 100644
--- a/llvm/test/CodeGen/X86/gcc_except_table_bb_sections.ll
+++ b/llvm/test/CodeGen/X86/gcc_except_table_bb_sections.ll
@@ -27,7 +27,7 @@ define i32 @main() uwtable optsize ssp personality i8* 
bitcast (i32 (...)* @__gx
 
 ; CHECK-NOT:            .cfi_lsda
 
-; CHECK-LABEL:        main.1:
+; CHECK-LABEL:        main.__part.1:
 ; CHECK-NEXT:           .cfi_startproc
 
 ; CHECK-NON-PIC-NEXT:   .cfi_personality 3, __gxx_personality_v0
@@ -38,7 +38,7 @@ define i32 @main() uwtable optsize ssp personality i8* 
bitcast (i32 (...)* @__gx
 
 ; CHECK-NOT:            .cfi_lsda
 
-; CHECK-LABEL:        main.2:
+; CHECK-LABEL:        main.__part.2:
 ; CHECK-NEXT:           .cfi_startproc
 
 ; CHECK-NON-PIC-NEXT:   .cfi_personality 3, __gxx_personality_v0
@@ -82,12 +82,12 @@ declare i32 @__gxx_personality_v0(...)
 
 ;; Verify @LPStart encoding for NON-PIC mode.
 ; CHECK-NON-PIC-NEXT:   .byte  0                       # @LPStart Encoding = 
absptr
-; CHECK-NON-PIC-NEXT:   .quad  main.2
+; CHECK-NON-PIC-NEXT:   .quad  main.__part.2
 
 ;; Verify @LPStart encoding for PIC mode.
 ; CHECK-PIC-NEXT:       .byte  16                      # @LPStart Encoding = 
pcrel
 ; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
-; CHECK-PIC-NEXT:       .quad  main.2-[[DOT]]
+; CHECK-PIC-NEXT:       .quad  main.__part.2-[[DOT]]
 
 ;; Verify @TType encoding for NON-PIC mode.
 ; CHECK-NON-PIC-NEXT:   .byte  3                       # @TType Encoding = 
udata4
@@ -102,17 +102,17 @@ declare i32 @__gxx_personality_v0(...)
 ; CHECK-NEXT:         .Lcst_begin0:
 ; CHECK-NEXT:           .uleb128 .Ltmp0-.Lfunc_begin0   # >> Call Site 1 <<
 ; CHECK-NEXT:           .uleb128 .Ltmp1-.Ltmp0          #   Call between 
.Ltmp0 and .Ltmp1
-; CHECK-NEXT:           .uleb128 .Ltmp2-main.2          #     jumps to .Ltmp2
+; CHECK-NEXT:           .uleb128 .Ltmp2-main.__part.2          #     jumps to 
.Ltmp2
 ; CHECK-NEXT:           .byte  3                       #   On action: 2
 ; CHECK-NEXT:           .p2align       2
 ; CHECK-NEXT:         .Lexception1:
 
 ; CHECK-NON-PIC-NEXT:   .byte  0                       # @LPStart Encoding = 
absptr
-; CHECK-NON-PIC-NEXT:   .quad  main.2
+; CHECK-NON-PIC-NEXT:   .quad  main.__part.2
 
 ; CHECK-PIC-NEXT:       .byte  16                      # @LPStart Encoding = 
pcrel
 ; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
-; CHECK-PIC-NEXT:       .quad  main.2-[[DOT]]
+; CHECK-PIC-NEXT:       .quad  main.__part.2-[[DOT]]
 
 ; CHECK-NON-PIC-NEXT:   .byte  3                       # @TType Encoding = 
udata4
 
@@ -127,11 +127,11 @@ declare i32 @__gxx_personality_v0(...)
 ; CHECK-NEXT:         .Lexception2:
 
 ; CHECK-NON-PIC-NEXT:   .byte  0                       # @LPStart Encoding = 
absptr
-; CHECK-NON-PIC-NEXT:   .quad  main.2
+; CHECK-NON-PIC-NEXT:   .quad  main.__part.2
 
 ; CHECK-PIC-NEXT:       .byte  16                      # @LPStart Encoding = 
pcrel
 ; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
-; CHECK-PIC-NEXT:       .quad  main.2-[[DOT]]
+; CHECK-PIC-NEXT:       .quad  main.__part.2-[[DOT]]
 
 ; CHECK-NON-PIC-NEXT:   .byte  3                       # @TType Encoding = 
udata4
 
@@ -142,8 +142,8 @@ declare i32 @__gxx_personality_v0(...)
 ; CHECK-NEXT:           .byte  1                       # Call site Encoding = 
uleb128
 ; CHECK-NEXT:           .uleb128 .Laction_table_base0-.Lcst_begin2
 ; CHECK-NEXT:         .Lcst_begin2:
-; CHECK-NEXT:           .uleb128 main.2-main.2          # >> Call Site 2 <<
-; CHECK-NEXT:           .uleb128 .LBB_END0_2-main.2     #   Call between 
main.2 and .LBB_END0_2
+; CHECK-NEXT:           .uleb128 main.__part.2-main.__part.2          # >> 
Call Site 2 <<
+; CHECK-NEXT:           .uleb128 .LBB_END0_2-main.__part.2     #   Call 
between main.__part.2 and .LBB_END0_2
 ; CHECK-NEXT:           .byte  0                       #     has no landing pad
 ; CHECK-NEXT:           .byte  0                       #   On action: cleanup
 ; CHECK-NEXT:         .Laction_table_base0:

diff  --git a/llvm/test/DebugInfo/X86/basic-block-sections_1.ll 
b/llvm/test/DebugInfo/X86/basic-block-sections_1.ll
index 98728d5e8605..959ba6728f4e 100644
--- a/llvm/test/DebugInfo/X86/basic-block-sections_1.ll
+++ b/llvm/test/DebugInfo/X86/basic-block-sections_1.ll
@@ -16,33 +16,33 @@
 ; NO-SECTIONS: DW_AT_high_pc [DW_FORM_data4] ({{.*}})
 ; BB-SECTIONS: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
 ; BB-SECTIONS-NEXT: DW_AT_ranges [DW_FORM_sec_offset]
-; BB-SECTIONS-NEXT: [{{.*}}) ".text._Z3fooi.1"
-; BB-SECTIONS-NEXT: [{{.*}}) ".text._Z3fooi.2"
-; BB-SECTIONS-NEXT: [{{.*}}) ".text._Z3fooi.3"
+; BB-SECTIONS-NEXT: [{{.*}}) ".text._Z3fooi.__part.1"
+; BB-SECTIONS-NEXT: [{{.*}}) ".text._Z3fooi.__part.2"
+; BB-SECTIONS-NEXT: [{{.*}}) ".text._Z3fooi.__part.3"
 ; BB-SECTIONS-NEXT: [{{.*}}) ".text"
 ; BB-SECTIONS-ASM: _Z3fooi:
 ; BB-SECTIONS-ASM: .Ltmp{{[0-9]+}}:
 ; BB-SECTIONS-ASM-NEXT: .loc 1 2 9 prologue_end
 ; BB-SECTIONS-ASM: .Ltmp{{[0-9]+}}:
 ; BB-SECTIONS-ASM-NEXT: .loc 1 2 7 is_stmt
-; BB-SECTIONS-ASM: _Z3fooi.1:
+; BB-SECTIONS-ASM: _Z3fooi.__part.1:
 ; BB-SECTIONS-ASM: .LBB_END0_{{[0-9]+}}:
-; BB-SECTIONS-ASM: .size       _Z3fooi.1, .LBB_END0_{{[0-9]+}}-_Z3fooi.1
-; BB-SECTIONS-ASM: _Z3fooi.2:
+; BB-SECTIONS-ASM: .size       _Z3fooi.__part.1, 
.LBB_END0_{{[0-9]+}}-_Z3fooi.__part.1
+; BB-SECTIONS-ASM: _Z3fooi.__part.2:
 ; BB-SECTIONS-ASM: .Ltmp{{[0-9]+}}:
 ; BB-SECTIONS-ASM-NEXT: .LBB_END0_{{[0-9]+}}:
-; BB-SECTIONS-ASM: .size       _Z3fooi.2, .LBB_END0_{{[0-9]+}}-_Z3fooi.2
-; BB-SECTIONS-ASM: _Z3fooi.3:
+; BB-SECTIONS-ASM: .size       _Z3fooi.__part.2, 
.LBB_END0_{{[0-9]+}}-_Z3fooi.__part.2
+; BB-SECTIONS-ASM: _Z3fooi.__part.3:
 ; BB-SECTIONS-ASM: .Ltmp{{[0-9]+}}:
 ; BB-SECTIONS-ASM-NEXT: .LBB_END0_{{[0-9]+}}:
-; BB-SECTIONS-ASM: .size       _Z3fooi.3, .LBB_END0_{{[0-9]+}}-_Z3fooi.3
+; BB-SECTIONS-ASM: .size       _Z3fooi.__part.3, 
.LBB_END0_{{[0-9]+}}-_Z3fooi.__part.3
 ; BB-SECTIONS-ASM: .Lfunc_end0:
 ; BB-SECTIONS-ASM: .Ldebug_ranges0:
-; BB-SECTIONS-ASM-NEXT:        .quad   _Z3fooi.1
+; BB-SECTIONS-ASM-NEXT:        .quad   _Z3fooi.__part.1
 ; BB-SECTIONS-ASM-NEXT:        .quad   .LBB_END0_{{[0-9]+}}
-; BB-SECTIONS-ASM-NEXT:        .quad   _Z3fooi.2
+; BB-SECTIONS-ASM-NEXT:        .quad   _Z3fooi.__part.2
 ; BB-SECTIONS-ASM-NEXT:        .quad   .LBB_END0_{{[0-9]+}}
-; BB-SECTIONS-ASM-NEXT:        .quad   _Z3fooi.3
+; BB-SECTIONS-ASM-NEXT:        .quad   _Z3fooi.__part.3
 ; BB-SECTIONS-ASM-NEXT:        .quad   .LBB_END0_{{[0-9]+}}
 ; BB-SECTIONS-ASM-NEXT:        .quad   .Lfunc_begin0
 ; BB-SECTIONS-ASM-NEXT:        .quad   .Lfunc_end0


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to