[llvm] aeec967 - Revert "Encode address offsets of basic blocks relative to the end of the previous basic blocks."
Rahman Lavaee via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 24 13:31:21 PST 2022
Author: Rahman Lavaee
Date: 2022-02-24T13:31:15-08:00
New Revision: aeec9671fb4cb0b3b221f0954a81f0cdb4b4764c
URL: https://github.com/llvm/llvm-project/commit/aeec9671fb4cb0b3b221f0954a81f0cdb4b4764c
DIFF: https://github.com/llvm/llvm-project/commit/aeec9671fb4cb0b3b221f0954a81f0cdb4b4764c.diff
LOG: Revert "Encode address offsets of basic blocks relative to the end of the previous basic blocks."
This reverts commit 029283c1c0d8d06fbf000f5682c56b8595a1101f.
The code in `ELFFile::decodeBBAddrMap` was not changed in the submitted patch.
Differential Revision: https://reviews.llvm.org/D120457
Added:
Modified:
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/lib/CodeGen/BasicBlockSections.cpp
llvm/test/CodeGen/X86/basic-block-sections-labels.ll
llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
llvm/tools/llvm-readobj/ELFDumper.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 2ce587b499f03..345cdb7c5597a 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1152,19 +1152,16 @@ void AsmPrinter::emitBBAddrMapSection(const MachineFunction &MF) {
OutStreamer->emitSymbolValue(FunctionSymbol, getPointerSize());
// Emit the total number of basic blocks in this function.
OutStreamer->emitULEB128IntValue(MF.size());
- const MCSymbol *PrevMBBEndSymbol = FunctionSymbol;
// Emit BB Information for each basic block in the funciton.
for (const MachineBasicBlock &MBB : MF) {
const MCSymbol *MBBSymbol =
MBB.isEntryBlock() ? FunctionSymbol : MBB.getSymbol();
- // Emit the basic block offset relative to the end of the previous block.
- // This is zero unless the block is padded due to alignment.
- emitLabelDifferenceAsULEB128(MBBSymbol, PrevMBBEndSymbol);
+ // Emit the basic block offset.
+ emitLabelDifferenceAsULEB128(MBBSymbol, FunctionSymbol);
// Emit the basic block size. When BBs have alignments, their size cannot
// always be computed from their offsets.
emitLabelDifferenceAsULEB128(MBB.getEndSymbol(), MBBSymbol);
OutStreamer->emitULEB128IntValue(getBBAddrMapMetadata(MBB));
- PrevMBBEndSymbol = MBB.getEndSymbol();
}
OutStreamer->PopSection();
}
diff --git a/llvm/lib/CodeGen/BasicBlockSections.cpp b/llvm/lib/CodeGen/BasicBlockSections.cpp
index 29478b5dbc085..c1901bc46d727 100644
--- a/llvm/lib/CodeGen/BasicBlockSections.cpp
+++ b/llvm/lib/CodeGen/BasicBlockSections.cpp
@@ -60,7 +60,7 @@
// Basic Block Labels
// ==================
//
-// With -fbasic-block-sections=labels, we encode the offsets of BB addresses of
+// With -fbasic-block-sections=labels, we emit the offsets of BB addresses of
// every function into the .llvm_bb_addr_map section. Along with the function
// symbols, this allows for mapping of virtual addresses in PMU profiles back to
// the corresponding basic blocks. This logic is implemented in AsmPrinter. This
diff --git a/llvm/test/CodeGen/X86/basic-block-sections-labels.ll b/llvm/test/CodeGen/X86/basic-block-sections-labels.ll
index 0de215d099d01..b9bcdc5258ada 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-labels.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-labels.ll
@@ -51,12 +51,12 @@ declare i32 @__gxx_personality_v0(...)
; CHECK-NEXT: .uleb128 .Lfunc_begin0-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_0-.Lfunc_begin0
; CHECK-NEXT: .byte 8
-; CHECK-NEXT: .uleb128 .LBB0_1-.LBB_END0_0
+; CHECK-NEXT: .uleb128 .LBB0_1-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_1-.LBB0_1
; CHECK-NEXT: .byte 8
-; CHECK-NEXT: .uleb128 .LBB0_2-.LBB_END0_1
+; CHECK-NEXT: .uleb128 .LBB0_2-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_2-.LBB0_2
; CHECK-NEXT: .byte 1
-; CHECK-NEXT: .uleb128 .LBB0_3-.LBB_END0_2
+; CHECK-NEXT: .uleb128 .LBB0_3-.Lfunc_begin0
; CHECK-NEXT: .uleb128 .LBB_END0_3-.LBB0_3
; CHECK-NEXT: .byte 5
diff --git a/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test b/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
index 7cb75d2acce38..0545cd959104a 100644
--- a/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
+++ b/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
@@ -30,7 +30,7 @@
# LLVM-NEXT: CanFallThrough: No
# LLVM-NEXT: }
# LLVM-NEXT: {
-# LLVM-NEXT: Offset: 0x4
+# LLVM-NEXT: Offset: 0x3
# LLVM-NEXT: Size: 0x4
# LLVM-NEXT: HasReturn: Yes
# LLVM-NEXT: HasTailCall: No
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index e1f69b4f45aa7..8699356135897 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -6983,13 +6983,10 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printBBAddrMaps() {
W.printString("Name", FuncName);
ListScope L(W, "BB entries");
- uint32_t FunctionRelativeAddress = 0;
for (const BBAddrMap::BBEntry &BBE : AM.BBEntries) {
DictScope L(W);
- FunctionRelativeAddress += BBE.Offset;
- W.printHex("Offset", FunctionRelativeAddress);
+ W.printHex("Offset", BBE.Offset);
W.printHex("Size", BBE.Size);
- FunctionRelativeAddress += BBE.Size;
W.printBoolean("HasReturn", BBE.HasReturn);
W.printBoolean("HasTailCall", BBE.HasTailCall);
W.printBoolean("IsEHPad", BBE.IsEHPad);
More information about the llvm-commits
mailing list