diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -859,28 +859,28 @@ const Function &F, const MachineBasicBlock &MBB, const TargetMachine &TM) const { assert(MBB.isBeginSection() && "Basic block does not start a section!"); - SmallString<128> Name; - Name = - (static_cast(MBB.getParent()->getSection()))->getName(); unsigned UniqueID = MCContext::GenericSectionID; - switch (MBB.getSectionID().Type) { - // Append suffixes to represent special cold and exception sections. - case MBBSectionID::SectionType::Exception: - Name += ".eh"; - break; - case MBBSectionID::SectionType::Cold: - Name += ".unlikely"; - break; - // For regular sections, either use a unique name, or a unique ID for the - // section. - default: + // For cold sections use the .text.unlikely prefix along with the parent + // function name. All cold blocks for the same function go to the same + // section. Similarly all exception blocks are grouped by symbol name + // under the .text.eh prefix. For regular sections, we either use a unique + // name, or a unique ID for the section. + SmallString<128> Name; + if (MBB.getSectionID() == MBBSectionID::ColdSectionID) { + Name += ".text.unlikely."; + Name += MBB.getParent()->getName(); + } else if (MBB.getSectionID() == MBBSectionID::ExceptionSectionID) { + Name += ".text.eh."; + Name += MBB.getParent()->getName(); + } else { + Name += MBB.getParent()->getSection()->getName(); if (TM.getUniqueBBSectionNames()) { Name += "."; Name += MBB.getSymbol()->getName(); - } else + } else { UniqueID = NextUniqueID++; - break; + } } unsigned Flags = ELF::SHF_ALLOC | ELF::SHF_EXECINSTR; diff --git a/llvm/test/CodeGen/X86/basicblock-sections-clusters-branches.ll b/llvm/test/CodeGen/X86/basicblock-sections-clusters-branches.ll --- a/llvm/test/CodeGen/X86/basicblock-sections-clusters-branches.ll +++ b/llvm/test/CodeGen/X86/basicblock-sections-clusters-branches.ll @@ -50,7 +50,7 @@ ; LINUX-SECTIONS1: .section .text.foo,"ax",@progbits,unique,1 ; LINUX-SECTIONS1-LABEL: a.BB.foo: ; LINUX-SECTIONS1: jmp raa.BB.foo -; LINUX-SECTIONS1: .section .text.foo.unlikely,"ax",@progbits +; LINUX-SECTIONS1: .section .text.unlikely.foo,"ax",@progbits ; LINUX-SECTIONS1-LABEL: raa.BB.foo: ; LINUX-SECTIONS2: .section .text.foo,"ax",@progbits diff --git a/llvm/test/CodeGen/X86/basicblock-sections-clusters-eh.ll b/llvm/test/CodeGen/X86/basicblock-sections-clusters-eh.ll --- a/llvm/test/CodeGen/X86/basicblock-sections-clusters-eh.ll +++ b/llvm/test/CodeGen/X86/basicblock-sections-clusters-eh.ll @@ -62,7 +62,7 @@ ; LINUX-SECTIONS1-LABEL: .LBB0_6: ; LINUX-SECTIONS1: .section .text.main,"ax",@progbits,unique,1 ; LINUX-SECTIONS1-LABEL: al.BB.main: -; LINUX-SECTIONS1: .section .text.main.eh,"ax",@progbits +; LINUX-SECTIONS1: .section .text.eh.main,"ax",@progbits ; LINUX-SECTIONS1-LABEL: l.BB.main: ; LINUX-SECTIONS1-NOT: .section ; LINUX-SECTIONS1-LABEL: .LBB0_3: diff --git a/llvm/test/CodeGen/X86/basicblock-sections-clusters.ll b/llvm/test/CodeGen/X86/basicblock-sections-clusters.ll --- a/llvm/test/CodeGen/X86/basicblock-sections-clusters.ll +++ b/llvm/test/CodeGen/X86/basicblock-sections-clusters.ll @@ -48,7 +48,7 @@ ; LINUX-SECTIONS1-LABEL: .Ltmp0: ; LINUX-SECTIONS1-NEXT: .size a.BB.foo, .Ltmp0-a.BB.foo ; LINUX-SECTIONS1-NOT: .section -; LINUX-SECTIONS1: .section .text.foo.unlikely,"ax",@progbits +; LINUX-SECTIONS1: .section .text.unlikely.foo,"ax",@progbits ; LINUX-SECTIONS1-LABEL: raa.BB.foo: ; LINUX-SECTIONS1: .section .text.foo,"ax",@progbits ; LINUX-SECTIONS1-LABEL: .Lfunc_end0: diff --git a/llvm/test/CodeGen/X86/basicblock-sections-cold.ll b/llvm/test/CodeGen/X86/basicblock-sections-cold.ll --- a/llvm/test/CodeGen/X86/basicblock-sections-cold.ll +++ b/llvm/test/CodeGen/X86/basicblock-sections-cold.ll @@ -34,7 +34,7 @@ ; Check that the basic block with id 1 doesn't get a section. ; LINUX-SECTIONS-NOT: .section .text._Z3bazb.r.BB._Z3bazb,"ax",@progbits,unique ; Check that a single cold section is started here and id 1 and 2 blocks are placed here. -; LINUX-SECTIONS: .section .text._Z3bazb.unlikely,"ax",@progbits +; LINUX-SECTIONS: .section .text.unlikely._Z3bazb,"ax",@progbits ; LINUX-SECTIONS: r.BB._Z3bazb: ; LINUX-SECTIONS-NOT: .section .text._Z3bazb.rr.BB._Z3bazb,"ax",@progbits,unique ; LINUX-SECTIONS: .LBB0_2: