forked from OSchip/llvm-project
Use .text.unlikely and .text.eh prefixes for MachineBasicBlock sections.
Summary: Instead of adding a ".unlikely" or ".eh" suffix for machine basic blocks, this change updates the behaviour to use an appropriate prefix instead. This allows lld to group basic block sections together when -z,keep-text-section-prefix is specified and matches the behaviour observed in gcc. Reviewers: tmsriram, mtrofin, efriedma Reviewed By: tmsriram, efriedma Subscribers: eli.friedman, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D78742
This commit is contained in:
parent
10bc12588d
commit
0cc063a8ff
|
@ -859,28 +859,28 @@ MCSection *TargetLoweringObjectFileELF::getSectionForMachineBasicBlock(
|
|||
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<MCSectionELF *>(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;
|
||||
|
|
|
@ -50,7 +50,7 @@ declare i32 @baz() #1
|
|||
; 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
|
||||
|
|
|
@ -62,7 +62,7 @@ declare i32 @__gxx_personality_v0(...)
|
|||
; 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:
|
||||
|
|
|
@ -48,7 +48,7 @@ declare i32 @baz() #1
|
|||
; 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:
|
||||
|
|
|
@ -34,7 +34,7 @@ declare i32 @_Z3foov() #1
|
|||
; 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:
|
||||
|
|
Loading…
Reference in New Issue