[llvm] 96b6ee1 - Revert "[Propeller] Use Fixed MBB ID instead of volatile MachineBasicBlock::Number."
Rahman Lavaee via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 13 11:14:14 PST 2022
Author: Rahman Lavaee
Date: 2022-12-13T11:13:57-08:00
New Revision: 96b6ee1bdc11eeea9d202a14d5975aac992f4176
URL: https://github.com/llvm/llvm-project/commit/96b6ee1bdc11eeea9d202a14d5975aac992f4176
DIFF: https://github.com/llvm/llvm-project/commit/96b6ee1bdc11eeea9d202a14d5975aac992f4176.diff
LOG: Revert "[Propeller] Use Fixed MBB ID instead of volatile MachineBasicBlock::Number."
This reverts commit 6015a045d768feab3bae9ad9c0c81e118df8b04a.
Differential Revision: https://reviews.llvm.org/D139952
Added:
Modified:
llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h
llvm/include/llvm/CodeGen/MachineBasicBlock.h
llvm/include/llvm/CodeGen/MachineFunction.h
llvm/include/llvm/Object/ELFTypes.h
llvm/include/llvm/ObjectYAML/ELFYAML.h
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/lib/CodeGen/BasicBlockSections.cpp
llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp
llvm/lib/CodeGen/MIRParser/MILexer.cpp
llvm/lib/CodeGen/MIRParser/MILexer.h
llvm/lib/CodeGen/MIRParser/MIParser.cpp
llvm/lib/CodeGen/MachineBasicBlock.cpp
llvm/lib/CodeGen/MachineFunction.cpp
llvm/lib/Object/ELF.cpp
llvm/lib/ObjectYAML/ELFEmitter.cpp
llvm/lib/ObjectYAML/ELFYAML.cpp
llvm/test/CodeGen/X86/basic-block-sections-mir-print.ll
llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
llvm/test/tools/obj2yaml/ELF/bb-addr-map.yaml
llvm/test/tools/yaml2obj/ELF/bb-addr-map.yaml
llvm/tools/llvm-readobj/ELFDumper.cpp
llvm/tools/obj2yaml/elf2yaml.cpp
llvm/unittests/Object/ELFObjectFileTest.cpp
Removed:
llvm/test/CodeGen/X86/basic-block-labels-mir-parse.mir
################################################################################
diff --git a/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h b/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h
index b944c6edde55..f19a7293ecc6 100644
--- a/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h
+++ b/llvm/include/llvm/CodeGen/BasicBlockSectionsProfileReader.h
@@ -31,8 +31,8 @@ namespace llvm {
// The cluster information for a machine basic block.
struct BBClusterInfo {
- // Unique ID for this basic block.
- unsigned BBID;
+ // MachineBasicBlock ID.
+ unsigned MBBNumber;
// Cluster ID this basic block belongs to.
unsigned ClusterID;
// Position of basic block within the cluster.
diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h
index f2fc266662b7..e85776f1d73a 100644
--- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h
+++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h
@@ -169,10 +169,6 @@ class MachineBasicBlock
/// Indicate that this basic block is the entry block of a cleanup funclet.
bool IsCleanupFuncletEntry = false;
- /// Fixed unique ID assigned to this basic block upon creation. Used with
- /// basic block sections and basic block labels.
- std::optional<unsigned> BBID;
-
/// With basic block sections, this stores the Section ID of the basic block.
MBBSectionID SectionID{0};
@@ -624,14 +620,6 @@ class MachineBasicBlock
void setIsEndSection(bool V = true) { IsEndSection = V; }
- std::optional<unsigned> getBBID() const { return BBID; }
-
- /// Returns the BBID of the block when BBAddrMapVersion >= 2, otherwise
- /// returns `MachineBasicBlock::Number`.
- /// TODO: Remove this function when version 1 is deprecated and replace its
- /// uses with `getBBID()`.
- unsigned getBBIDOrNumber() const;
-
/// Returns the section ID of this basic block.
MBBSectionID getSectionID() const { return SectionID; }
@@ -641,12 +629,6 @@ class MachineBasicBlock
((unsigned)SectionID.Type) + SectionID.Number;
}
- /// Sets the fixed BBID of this basic block.
- void setBBID(unsigned V) {
- assert(!BBID.has_value() && "Cannot change BBID.");
- BBID = V;
- }
-
/// Sets the section ID for this basic block.
void setSectionID(MBBSectionID V) { SectionID = V; }
diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h
index 7afa4d5aa1c6..4d2e5d38c5a6 100644
--- a/llvm/include/llvm/CodeGen/MachineFunction.h
+++ b/llvm/include/llvm/CodeGen/MachineFunction.h
@@ -374,9 +374,6 @@ class LLVM_EXTERNAL_VISIBILITY MachineFunction {
bool HasEHScopes = false;
bool HasEHFunclets = false;
- /// BBID to assign to the next basic block of this function.
- unsigned NextBBID = 0;
-
/// Section Type for basic blocks, only relevant with basic block sections.
BasicBlockSection BBSectionsType = BasicBlockSection::None;
diff --git a/llvm/include/llvm/Object/ELFTypes.h b/llvm/include/llvm/Object/ELFTypes.h
index 45e57869bace..7ebad36e8fa7 100644
--- a/llvm/include/llvm/Object/ELFTypes.h
+++ b/llvm/include/llvm/Object/ELFTypes.h
@@ -799,7 +799,6 @@ struct BBAddrMap {
uint64_t Addr; // Function address
// Struct representing the BBAddrMap information for one basic block.
struct BBEntry {
- uint32_t ID; // Unique ID of this basic block.
uint32_t Offset; // Offset of basic block relative to function start.
uint32_t Size; // Size of the basic block.
@@ -810,13 +809,13 @@ struct BBAddrMap {
bool IsEHPad; // If this is an exception handling block.
bool CanFallThrough; // If this block can fall through to its next.
- BBEntry(uint32_t ID, uint32_t Offset, uint32_t Size, uint32_t Metadata)
- : ID(ID), Offset(Offset), Size(Size), HasReturn(Metadata & 1),
+ BBEntry(uint32_t Offset, uint32_t Size, uint32_t Metadata)
+ : Offset(Offset), Size(Size), HasReturn(Metadata & 1),
HasTailCall(Metadata & (1 << 1)), IsEHPad(Metadata & (1 << 2)),
CanFallThrough(Metadata & (1 << 3)){};
bool operator==(const BBEntry &Other) const {
- return ID == Other.ID && Offset == Other.Offset && Size == Other.Size &&
+ return Offset == Other.Offset && Size == Other.Size &&
HasReturn == Other.HasReturn && HasTailCall == Other.HasTailCall &&
IsEHPad == Other.IsEHPad && CanFallThrough == Other.CanFallThrough;
}
diff --git a/llvm/include/llvm/ObjectYAML/ELFYAML.h b/llvm/include/llvm/ObjectYAML/ELFYAML.h
index 1ba41232f552..cc77971c61cb 100644
--- a/llvm/include/llvm/ObjectYAML/ELFYAML.h
+++ b/llvm/include/llvm/ObjectYAML/ELFYAML.h
@@ -158,7 +158,6 @@ struct DynamicEntry {
struct BBAddrMapEntry {
struct BBEntry {
- uint32_t ID;
llvm::yaml::Hex64 AddressOffset;
llvm::yaml::Hex64 Size;
llvm::yaml::Hex64 Metadata;
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 14f0b78e4a18..7b504e021a4f 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1345,8 +1345,7 @@ void AsmPrinter::emitBBAddrMapSection(const MachineFunction &MF) {
OutStreamer->pushSection();
OutStreamer->switchSection(BBAddrMapSection);
OutStreamer->AddComment("version");
- uint8_t BBAddrMapVersion = OutStreamer->getContext().getBBAddrMapVersion();
- OutStreamer->emitInt8(BBAddrMapVersion);
+ OutStreamer->emitInt8(OutStreamer->getContext().getBBAddrMapVersion());
OutStreamer->AddComment("feature");
OutStreamer->emitInt8(0);
OutStreamer->AddComment("function address");
@@ -1358,19 +1357,12 @@ void AsmPrinter::emitBBAddrMapSection(const MachineFunction &MF) {
for (const MachineBasicBlock &MBB : MF) {
const MCSymbol *MBBSymbol =
MBB.isEntryBlock() ? FunctionSymbol : MBB.getSymbol();
- // TODO: Remove this check when version 1 is deprecated.
- if (BBAddrMapVersion > 1) {
- OutStreamer->AddComment("BB id");
- // Emit the BB ID for this basic block.
- OutStreamer->emitULEB128IntValue(*MBB.getBBID());
- }
// 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 size. When BBs have alignments, their size cannot
// always be computed from their offsets.
emitLabelDifferenceAsULEB128(MBB.getEndSymbol(), MBBSymbol);
- // Emit the Metadata.
OutStreamer->emitULEB128IntValue(getBBAddrMapMetadata(MBB));
PrevMBBEndSymbol = MBB.getEndSymbol();
}
diff --git a/llvm/lib/CodeGen/BasicBlockSections.cpp b/llvm/lib/CodeGen/BasicBlockSections.cpp
index e7e73606de07..776ab6342335 100644
--- a/llvm/lib/CodeGen/BasicBlockSections.cpp
+++ b/llvm/lib/CodeGen/BasicBlockSections.cpp
@@ -70,8 +70,8 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
-#include "llvm/CodeGen/BasicBlockSectionUtils.h"
#include "llvm/CodeGen/BasicBlockSectionsProfileReader.h"
+#include "llvm/CodeGen/BasicBlockSectionUtils.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/Passes.h"
@@ -130,9 +130,9 @@ INITIALIZE_PASS(BasicBlockSections, "bbsections-prepare",
// This function updates and optimizes the branching instructions of every basic
// block in a given function to account for changes in the layout.
-static void
-updateBranches(MachineFunction &MF,
- const SmallVector<MachineBasicBlock *> &PreLayoutFallThroughs) {
+static void updateBranches(
+ MachineFunction &MF,
+ const SmallVector<MachineBasicBlock *, 4> &PreLayoutFallThroughs) {
const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
SmallVector<MachineOperand, 4> Cond;
for (auto &MBB : MF) {
@@ -167,7 +167,7 @@ updateBranches(MachineFunction &MF,
bool getBBClusterInfoForFunction(
const MachineFunction &MF,
BasicBlockSectionsProfileReader *BBSectionsProfileReader,
- DenseMap<unsigned, BBClusterInfo> &V) {
+ std::vector<Optional<BBClusterInfo>> &V) {
// Find the assoicated cluster information.
std::pair<bool, SmallVector<BBClusterInfo, 4>> P =
@@ -182,8 +182,13 @@ bool getBBClusterInfoForFunction(
return true;
}
- for (const BBClusterInfo &BBCI : P.second)
- V[BBCI.BBID] = BBCI;
+ V.resize(MF.getNumBlockIDs());
+ for (auto bbClusterInfo : P.second) {
+ // Bail out if the cluster information contains invalid MBB numbers.
+ if (bbClusterInfo.MBBNumber >= MF.getNumBlockIDs())
+ return false;
+ V[bbClusterInfo.MBBNumber] = bbClusterInfo;
+ }
return true;
}
@@ -194,12 +199,11 @@ bool getBBClusterInfoForFunction(
// clusters, they are moved into a single "Exception" section. Eventually,
// clusters are ordered in increasing order of their IDs, with the "Exception"
// and "Cold" succeeding all other clusters.
-// FuncBBClusterInfo represent the cluster information for basic blocks. It
-// maps from BBID of basic blocks to their cluster information. If this is
-// empty, it means unique sections for all basic blocks in the function.
+// FuncBBClusterInfo represent the cluster information for basic blocks. If this
+// is empty, it means unique sections for all basic blocks in the function.
static void
assignSections(MachineFunction &MF,
- const DenseMap<unsigned, BBClusterInfo> &FuncBBClusterInfo) {
+ const std::vector<Optional<BBClusterInfo>> &FuncBBClusterInfo) {
assert(MF.hasBBSections() && "BB Sections is not set for function.");
// This variable stores the section ID of the cluster containing eh_pads (if
// all eh_pads are one cluster). If more than one cluster contain eh_pads, we
@@ -214,21 +218,15 @@ assignSections(MachineFunction &MF,
if (MF.getTarget().getBBSectionsType() == llvm::BasicBlockSection::All ||
FuncBBClusterInfo.empty()) {
// If unique sections are desired for all basic blocks of the function, we
- // set every basic block's section ID equal to its original position in
- // the layout (which is equal to its number). This ensures that basic
- // blocks are ordered canonically.
- MBB.setSectionID(MBB.getNumber());
- } else {
- // TODO: Replace `getBBIDOrNumber` with `getBBID` once version 1 is
- // deprecated.
- auto I = FuncBBClusterInfo.find(MBB.getBBIDOrNumber());
- if (I != FuncBBClusterInfo.end()) {
- MBB.setSectionID(I->second.ClusterID);
- } else {
- // BB goes into the special cold section if it is not specified in the
- // cluster info map.
- MBB.setSectionID(MBBSectionID::ColdSectionID);
- }
+ // set every basic block's section ID equal to its number (basic block
+ // id). This further ensures that basic blocks are ordered canonically.
+ MBB.setSectionID({static_cast<unsigned int>(MBB.getNumber())});
+ } else if (FuncBBClusterInfo[MBB.getNumber()])
+ MBB.setSectionID(FuncBBClusterInfo[MBB.getNumber()]->ClusterID);
+ else {
+ // BB goes into the special cold section if it is not specified in the
+ // cluster info map.
+ MBB.setSectionID(MBBSectionID::ColdSectionID);
}
if (MBB.isEHPad() && EHPadsSectionID != MBB.getSectionID() &&
@@ -251,14 +249,12 @@ assignSections(MachineFunction &MF,
void llvm::sortBasicBlocksAndUpdateBranches(
MachineFunction &MF, MachineBasicBlockComparator MBBCmp) {
- [[maybe_unused]] const MachineBasicBlock *EntryBlock = &MF.front();
- SmallVector<MachineBasicBlock *> PreLayoutFallThroughs(MF.getNumBlockIDs());
+ SmallVector<MachineBasicBlock *, 4> PreLayoutFallThroughs(
+ MF.getNumBlockIDs());
for (auto &MBB : MF)
PreLayoutFallThroughs[MBB.getNumber()] = MBB.getFallThrough();
MF.sort(MBBCmp);
- assert(&MF.front() == EntryBlock &&
- "Entry block should not be displaced by basic block sections");
// Set IsBeginSection and IsEndSection according to the assigned section IDs.
MF.assignBeginEndSections();
@@ -321,14 +317,11 @@ bool BasicBlockSections::runOnMachineFunction(MachineFunction &MF) {
if (BBSectionsType == BasicBlockSection::List &&
hasInstrProfHashMismatch(MF))
return true;
- // Renumber blocks before sorting them. This is useful during sorting,
- // basic blocks in the same section will retain the default order.
- // This renumbering should also be done for basic block labels to match the
- // profiles with the correct blocks.
- // For LLVM_BB_ADDR_MAP versions 2 and higher, this renumbering serves
- // the
diff erent purpose of accessing the original layout positions and
- // finding the original fallthroughs.
- // TODO: Change the above comment accordingly when version 1 is deprecated.
+
+ // Renumber blocks before sorting them for basic block sections. This is
+ // useful during sorting, basic blocks in the same section will retain the
+ // default order. This renumbering should also be done for basic block
+ // labels to match the profiles with the correct blocks.
MF.RenumberBlocks();
if (BBSectionsType == BasicBlockSection::Labels) {
@@ -338,8 +331,7 @@ bool BasicBlockSections::runOnMachineFunction(MachineFunction &MF) {
BBSectionsProfileReader = &getAnalysis<BasicBlockSectionsProfileReader>();
- // Map from BBID of blocks to their cluster information.
- DenseMap<unsigned, BBClusterInfo> FuncBBClusterInfo;
+ std::vector<Optional<BBClusterInfo>> FuncBBClusterInfo;
if (BBSectionsType == BasicBlockSection::List &&
!getBBClusterInfoForFunction(MF, BBSectionsProfileReader,
FuncBBClusterInfo))
@@ -379,8 +371,8 @@ bool BasicBlockSections::runOnMachineFunction(MachineFunction &MF) {
// If the two basic block are in the same section, the order is decided by
// their position within the section.
if (XSectionID.Type == MBBSectionID::SectionType::Default)
- return FuncBBClusterInfo.lookup(X.getBBIDOrNumber()).PositionInCluster <
- FuncBBClusterInfo.lookup(Y.getBBIDOrNumber()).PositionInCluster;
+ return FuncBBClusterInfo[X.getNumber()]->PositionInCluster <
+ FuncBBClusterInfo[Y.getNumber()]->PositionInCluster;
return X.getNumber() < Y.getNumber();
};
diff --git a/llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp b/llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp
index 5bc8d82debc3..c2acf115998b 100644
--- a/llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp
+++ b/llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp
@@ -93,23 +93,23 @@ static Error getBBClusterInfo(const MemoryBuffer *MBuf,
if (FI == ProgramBBClusterInfo.end())
return invalidProfileError(
"Cluster list does not follow a function name specifier.");
- SmallVector<StringRef, 4> BBIDs;
- S.split(BBIDs, ' ');
+ SmallVector<StringRef, 4> BBIndexes;
+ S.split(BBIndexes, ' ');
// Reset current cluster position.
CurrentPosition = 0;
- for (auto BBIDStr : BBIDs) {
- unsigned long long BBID;
- if (getAsUnsignedInteger(BBIDStr, 10, BBID))
+ for (auto BBIndexStr : BBIndexes) {
+ unsigned long long BBIndex;
+ if (getAsUnsignedInteger(BBIndexStr, 10, BBIndex))
return invalidProfileError(Twine("Unsigned integer expected: '") +
- BBIDStr + "'.");
- if (!FuncBBIDs.insert(BBID).second)
+ BBIndexStr + "'.");
+ if (!FuncBBIDs.insert(BBIndex).second)
return invalidProfileError(Twine("Duplicate basic block id found '") +
- BBIDStr + "'.");
- if (BBID == 0 && CurrentPosition)
+ BBIndexStr + "'.");
+ if (!BBIndex && CurrentPosition)
return invalidProfileError("Entry BB (0) does not begin a cluster.");
- FI->second.emplace_back(
- BBClusterInfo{((unsigned)BBID), CurrentCluster, CurrentPosition++});
+ FI->second.emplace_back(BBClusterInfo{
+ ((unsigned)BBIndex), CurrentCluster, CurrentPosition++});
}
CurrentCluster++;
} else { // This is a function name specifier.
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 04746105bef0..e9cd5fdaa070 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -272,13 +272,11 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {
.Case("pcsections", MIToken::kw_pcsections)
.Case("cfi-type", MIToken::kw_cfi_type)
.Case("bbsections", MIToken::kw_bbsections)
- .Case("bb_id", MIToken::kw_bb_id)
.Case("unknown-size", MIToken::kw_unknown_size)
.Case("unknown-address", MIToken::kw_unknown_address)
.Case("distinct", MIToken::kw_distinct)
.Case("ir-block-address-taken", MIToken::kw_ir_block_address_taken)
- .Case("machine-block-address-taken",
- MIToken::kw_machine_block_address_taken)
+ .Case("machine-block-address-taken", MIToken::kw_machine_block_address_taken)
.Default(MIToken::Identifier);
}
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.h b/llvm/lib/CodeGen/MIRParser/MILexer.h
index 839683555472..b1ffeac86514 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.h
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.h
@@ -128,7 +128,6 @@ struct MIToken {
kw_pcsections,
kw_cfi_type,
kw_bbsections,
- kw_bb_id,
kw_unknown_size,
kw_unknown_address,
kw_ir_block_address_taken,
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 21c95e1d13c2..5adf42ad4258 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -500,7 +500,6 @@ class MIParser {
bool parseAlignment(uint64_t &Alignment);
bool parseAddrspace(unsigned &Addrspace);
bool parseSectionID(std::optional<MBBSectionID> &SID);
- bool parseBBID(std::optional<unsigned> &BBID);
bool parseOperandsOffset(MachineOperand &Op);
bool parseIRValue(const Value *&V);
bool parseMemoryOperandFlag(MachineMemOperand::Flags &Flags);
@@ -664,18 +663,6 @@ bool MIParser::parseSectionID(std::optional<MBBSectionID> &SID) {
return false;
}
-// Parse Machine Basic Block ID.
-bool MIParser::parseBBID(std::optional<unsigned> &BBID) {
- assert(Token.is(MIToken::kw_bb_id));
- lex();
- unsigned Value = 0;
- if (getUnsigned(Value))
- return error("Unknown BB ID");
- BBID = Value;
- lex();
- return false;
-}
-
bool MIParser::parseBasicBlockDefinition(
DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) {
assert(Token.is(MIToken::MachineBasicBlockLabel));
@@ -692,7 +679,6 @@ bool MIParser::parseBasicBlockDefinition(
bool IsEHFuncletEntry = false;
std::optional<MBBSectionID> SectionID;
uint64_t Alignment = 0;
- std::optional<unsigned> BBID;
BasicBlock *BB = nullptr;
if (consumeIfPresent(MIToken::lparen)) {
do {
@@ -733,10 +719,6 @@ bool MIParser::parseBasicBlockDefinition(
if (parseSectionID(SectionID))
return true;
break;
- case MIToken::kw_bb_id:
- if (parseBBID(BBID))
- return true;
- break;
default:
break;
}
@@ -774,13 +756,6 @@ bool MIParser::parseBasicBlockDefinition(
MBB->setSectionID(SectionID.value());
MF.setBBSectionsType(BasicBlockSection::List);
}
- if (BBID.has_value()) {
- // BBSectionsType is set to `List` if any basic blocks has `SectionID`.
- // Here, we set it to `Labels` if it hasn't been set above.
- if (!MF.hasBBSections())
- MF.setBBSectionsType(BasicBlockSection::Labels);
- MBB->setBBID(BBID.value());
- }
return false;
}
diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp
index c639f95c70e3..7a377b49f67b 100644
--- a/llvm/lib/CodeGen/MachineBasicBlock.cpp
+++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp
@@ -563,11 +563,6 @@ void MachineBasicBlock::printName(raw_ostream &os, unsigned printNameFlags,
}
hasAttributes = true;
}
- if (getBBID().has_value()) {
- os << (hasAttributes ? ", " : " (");
- os << "bb_id " << *getBBID();
- hasAttributes = true;
- }
}
if (hasAttributes)
@@ -1656,11 +1651,6 @@ bool MachineBasicBlock::sizeWithoutDebugLargerThan(unsigned Limit) const {
return false;
}
-unsigned MachineBasicBlock::getBBIDOrNumber() const {
- uint8_t BBAddrMapVersion = getParent()->getContext().getBBAddrMapVersion();
- return BBAddrMapVersion < 2 ? getNumber() : *getBBID();
-}
-
const MBBSectionID MBBSectionID::ColdSectionID(MBBSectionID::SectionType::Cold);
const MBBSectionID
MBBSectionID::ExceptionSectionID(MBBSectionID::SectionType::Exception);
diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp
index 9defe36cc6b6..78b49c923662 100644
--- a/llvm/lib/CodeGen/MachineFunction.cpp
+++ b/llvm/lib/CodeGen/MachineFunction.cpp
@@ -437,16 +437,8 @@ void MachineFunction::deleteMachineInstr(MachineInstr *MI) {
/// `new MachineBasicBlock'.
MachineBasicBlock *
MachineFunction::CreateMachineBasicBlock(const BasicBlock *bb) {
- MachineBasicBlock *MBB =
- new (BasicBlockRecycler.Allocate<MachineBasicBlock>(Allocator))
- MachineBasicBlock(*this, bb);
- // Set BBID for `-basic-block=sections=labels` and
- // `-basic-block-sections=list` to allow robust mapping of profiles to basic
- // blocks.
- if (Target.getBBSectionsType() == BasicBlockSection::Labels ||
- Target.getBBSectionsType() == BasicBlockSection::List)
- MBB->setBBID(NextBBID++);
- return MBB;
+ return new (BasicBlockRecycler.Allocate<MachineBasicBlock>(Allocator))
+ MachineBasicBlock(*this, bb);
}
/// Delete the given MachineBasicBlock.
diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp
index 80d1fc2227ac..93d3476ac3e1 100644
--- a/llvm/lib/Object/ELF.cpp
+++ b/llvm/lib/Object/ELF.cpp
@@ -669,7 +669,7 @@ ELFFile<ELFT>::decodeBBAddrMap(const Elf_Shdr &Sec) const {
Version = Data.getU8(Cur);
if (!Cur)
break;
- if (Version > 2)
+ if (Version > 1)
return createError("unsupported SHT_LLVM_BB_ADDR_MAP version: " +
Twine(static_cast<int>(Version)));
Data.getU8(Cur); // Feature byte
@@ -678,9 +678,8 @@ ELFFile<ELFT>::decodeBBAddrMap(const Elf_Shdr &Sec) const {
uint32_t NumBlocks = ReadULEB128AsUInt32();
std::vector<BBAddrMap::BBEntry> BBEntries;
uint32_t PrevBBEndOffset = 0;
- for (uint32_t BlockIndex = 0;
- !ULEBSizeErr && Cur && (BlockIndex < NumBlocks); ++BlockIndex) {
- uint32_t ID = Version >= 2 ? ReadULEB128AsUInt32() : BlockIndex;
+ for (uint32_t BlockID = 0; !ULEBSizeErr && Cur && (BlockID < NumBlocks);
+ ++BlockID) {
uint32_t Offset = ReadULEB128AsUInt32();
uint32_t Size = ReadULEB128AsUInt32();
uint32_t Metadata = ReadULEB128AsUInt32();
@@ -689,7 +688,7 @@ ELFFile<ELFT>::decodeBBAddrMap(const Elf_Shdr &Sec) const {
Offset += PrevBBEndOffset;
PrevBBEndOffset = Offset + Size;
}
- BBEntries.push_back({ID, Offset, Size, Metadata});
+ BBEntries.push_back({Offset, Size, Metadata});
}
FunctionEntries.push_back({Address, std::move(BBEntries)});
}
diff --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp
index d9c12f935232..53fee6af0c14 100644
--- a/llvm/lib/ObjectYAML/ELFEmitter.cpp
+++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp
@@ -1396,7 +1396,7 @@ void ELFState<ELFT>::writeSectionContent(
for (const ELFYAML::BBAddrMapEntry &E : *Section.Entries) {
// Write version and feature values.
if (Section.Type == llvm::ELF::SHT_LLVM_BB_ADDR_MAP) {
- if (E.Version > 2)
+ if (E.Version > 1)
WithColor::warning() << "unsupported SHT_LLVM_BB_ADDR_MAP version: "
<< static_cast<int>(E.Version)
<< "; encoding using the most recent version";
@@ -1414,13 +1414,10 @@ void ELFState<ELFT>::writeSectionContent(
// Write all BBEntries.
if (!E.BBEntries)
continue;
- for (const ELFYAML::BBAddrMapEntry::BBEntry &BBE : *E.BBEntries) {
- if (Section.Type == llvm::ELF::SHT_LLVM_BB_ADDR_MAP && E.Version > 1)
- SHeader.sh_size += CBA.writeULEB128(BBE.ID);
+ for (const ELFYAML::BBAddrMapEntry::BBEntry &BBE : *E.BBEntries)
SHeader.sh_size += CBA.writeULEB128(BBE.AddressOffset) +
CBA.writeULEB128(BBE.Size) +
CBA.writeULEB128(BBE.Metadata);
- }
}
}
diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp
index 6517fe13feaa..5513ce460dbc 100644
--- a/llvm/lib/ObjectYAML/ELFYAML.cpp
+++ b/llvm/lib/ObjectYAML/ELFYAML.cpp
@@ -1795,7 +1795,6 @@ void MappingTraits<ELFYAML::BBAddrMapEntry>::mapping(
void MappingTraits<ELFYAML::BBAddrMapEntry::BBEntry>::mapping(
IO &IO, ELFYAML::BBAddrMapEntry::BBEntry &E) {
assert(IO.getContext() && "The IO context is not initialized");
- IO.mapOptional("ID", E.ID);
IO.mapRequired("AddressOffset", E.AddressOffset);
IO.mapRequired("Size", E.Size);
IO.mapRequired("Metadata", E.Metadata);
diff --git a/llvm/test/CodeGen/X86/basic-block-labels-mir-parse.mir b/llvm/test/CodeGen/X86/basic-block-labels-mir-parse.mir
deleted file mode 100644
index 74a7bcf3ae82..000000000000
--- a/llvm/test/CodeGen/X86/basic-block-labels-mir-parse.mir
+++ /dev/null
@@ -1,145 +0,0 @@
-# Start after bbsections0-prepare and check that the BB address map is generated.
-# RUN: llc -mtriple x86_64-unknown-linux-gnu -start-after=bbsections-prepare %s -o - | FileCheck %s -check-prefix=CHECK
-
-# How to generate the input:
-# foo.cc
-# int foo(bool k) {
-# if (k) return 1;
-# return 0;
-# }
-#
-# clang -O0 -S -emit-llvm foo.cc
-# llc < foo.ll -stop-after=bbsections-prepare -basic-block-sections=labels
-
-# CHECK: .section .llvm_bb_addr_map,"o", at llvm_bb_addr_map,.text
---- |
- ; ModuleID = '<stdin>'
- source_filename = "/tmp/foo.cc"
- 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-pc-linux-gnu"
-
- ; Function Attrs: mustprogress noinline nounwind optnone uwtable
- define dso_local noundef i32 @_Z3foob(i1 noundef zeroext %0) #0 {
- %2 = alloca i32, align 4
- %3 = alloca i8, align 1
- %4 = zext i1 %0 to i8
- store i8 %4, i8* %3, align 1
- %5 = load i8, i8* %3, align 1
- %6 = trunc i8 %5 to i1
- br i1 %6, label %7, label %8
-
- 7: ; preds = %1
- store i32 1, i32* %2, align 4
- br label %9
-
- 8: ; preds = %1
- store i32 0, i32* %2, align 4
- br label %9
-
- 9: ; preds = %8, %7
- %10 = load i32, i32* %2, align 4
- ret i32 %10
- }
-
- attributes #0 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="all" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-
- !llvm.module.flags = !{!0, !1, !2, !3, !4}
- !llvm.ident = !{!5}
-
- !0 = !{i32 1, !"wchar_size", i32 4}
- !1 = !{i32 7, !"PIC Level", i32 2}
- !2 = !{i32 7, !"PIE Level", i32 2}
- !3 = !{i32 7, !"uwtable", i32 1}
- !4 = !{i32 7, !"frame-pointer", i32 2}
- !5 = !{!"Debian clang version 14.0.6-2"}
-
-...
----
-name: _Z3foob
-alignment: 16
-exposesReturnsTwice: false
-legalized: false
-regBankSelected: false
-selected: false
-failedISel: false
-tracksRegLiveness: true
-hasWinCFI: false
-callsEHReturn: false
-callsUnwindInit: false
-hasEHCatchret: false
-hasEHScopes: false
-hasEHFunclets: false
-failsVerification: false
-tracksDebugUserValues: true
-registers: []
-liveins:
- - { reg: '$edi', virtual-reg: '' }
-frameInfo:
- isFrameAddressTaken: false
- isReturnAddressTaken: false
- hasStackMap: false
- hasPatchPoint: false
- stackSize: 8
- offsetAdjustment: -8
- maxAlignment: 4
- adjustsStack: false
- hasCalls: false
- stackProtector: ''
- functionContext: ''
- maxCallFrameSize: 0
- cvBytesOfCalleeSavedRegisters: 0
- hasOpaqueSPAdjustment: false
- hasVAStart: false
- hasMustTailInVarArgFunc: false
- hasTailCall: false
- localFrameSize: 0
- savePoint: ''
- restorePoint: ''
-fixedStack:
- - { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16, stack-id: default,
- callee-saved-register: '', callee-saved-restored: true, debug-info-variable: '',
- debug-info-expression: '', debug-info-location: '' }
-stack:
- - { id: 0, name: '', type: default, offset: -24, size: 4, alignment: 4,
- stack-id: default, callee-saved-register: '', callee-saved-restored: true,
- debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
- - { id: 1, name: '', type: default, offset: -17, size: 1, alignment: 1,
- stack-id: default, callee-saved-register: '', callee-saved-restored: true,
- debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
-callSites: []
-debugValueSubstitutions: []
-constants: []
-machineFunctionInfo: {}
-body: |
- bb.0 (%ir-block.1, bb_id 0):
- successors: %bb.2(0x40000000), %bb.1(0x40000000)
- liveins: $edi
-
- frame-setup PUSH64r killed $rbp, implicit-def $rsp, implicit $rsp
- frame-setup CFI_INSTRUCTION def_cfa_offset 16
- frame-setup CFI_INSTRUCTION offset $rbp, -16
- $rbp = frame-setup MOV64rr $rsp
- frame-setup CFI_INSTRUCTION def_cfa_register $rbp
- renamable $dil = AND8ri renamable $dil, 1, implicit-def dead $eflags, implicit killed $edi, implicit-def $edi
- MOV8mr $rbp, 1, $noreg, -1, $noreg, renamable $dil, implicit killed $edi :: (store (s8) into %ir.3)
- TEST8mi $rbp, 1, $noreg, -1, $noreg, 1, implicit-def $eflags :: (load (s8) from %ir.3)
- JCC_1 %bb.2, 4, implicit killed $eflags
-
- bb.1 (%ir-block.7, bb_id 1):
- successors: %bb.3(0x80000000)
-
- MOV32mi $rbp, 1, $noreg, -8, $noreg, 1 :: (store (s32) into %ir.2)
- JMP_1 %bb.3
-
- bb.2 (%ir-block.8, bb_id 2):
- successors: %bb.3(0x80000000)
-
- MOV32mi $rbp, 1, $noreg, -8, $noreg, 0 :: (store (s32) into %ir.2)
-
- bb.3 (%ir-block.9, bb_id 3):
- renamable $eax = MOV32rm $rbp, 1, $noreg, -8, $noreg :: (load (s32) from %ir.2)
- $rbp = frame-destroy POP64r implicit-def $rsp, implicit $rsp
- frame-destroy CFI_INSTRUCTION def_cfa $rsp, 8
- RET64 implicit $eax
-
-...
diff --git a/llvm/test/CodeGen/X86/basic-block-sections-mir-print.ll b/llvm/test/CodeGen/X86/basic-block-sections-mir-print.ll
index 1767903561ce..b37a314ef65c 100644
--- a/llvm/test/CodeGen/X86/basic-block-sections-mir-print.ll
+++ b/llvm/test/CodeGen/X86/basic-block-sections-mir-print.ll
@@ -1,9 +1,8 @@
; Stop after bbsections-prepare and check MIR output for section type.
-; RUN: llc < %s -O0 -mtriple=x86_64-pc-linux -function-sections -basic-block-sections=labels -stop-after=bbsections-prepare | FileCheck %s -check-prefix=BBLABELS
; RUN: echo '!_Z3foob' > %t
; RUN: echo '!!1' >> %t
; RUN: echo '!!2' >> %t
-; RUN: llc < %s -O0 -mtriple=x86_64-pc-linux -function-sections -basic-block-sections=%t -stop-after=bbsections-prepare | FileCheck %s -check-prefix=BBSECTIONS
+; RUN: llc < %s -O0 -mtriple=x86_64-pc-linux -function-sections -basic-block-sections=%t -stop-after=bbsections-prepare | FileCheck %s -check-prefix=CHECK
@_ZTIb = external constant ptr
define dso_local i32 @_Z3foob(i1 zeroext %0) {
@@ -28,12 +27,7 @@ define dso_local i32 @_Z3foob(i1 zeroext %0) {
ret i32 %10
}
-; BBSECTIONS: bb.0 (%ir-block.1, bbsections Cold, bb_id 0):
-; BBSECTIONS: bb.3 (%ir-block.9, bbsections Cold, bb_id 3):
-; BBSECTIONS: bb.1 (%ir-block.7, bb_id 1)
-; BBSECTIONS: bb.2 (%ir-block.8, bbsections 1, bb_id 2):
-
-; BBLABELS: bb.0 (%ir-block.1, bb_id 0):
-; BBLABELS: bb.1 (%ir-block.7, bb_id 1):
-; BBLABELS: bb.2 (%ir-block.8, bb_id 2):
-; BBLABELS: bb.3 (%ir-block.9, bb_id 3):
+; CHECK: bb.0 (%ir-block.1, bbsections Cold):
+; CHECK: bb.3 (%ir-block.9, bbsections Cold):
+; CHECK: bb.1 (%ir-block.7)
+; CHECK: bb.2 (%ir-block.8, bbsections 1):
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 3f6bde333af0..0f2fa50ccd43 100644
--- a/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
+++ b/llvm/test/tools/llvm-readobj/ELF/bb-addr-map.test
@@ -25,7 +25,6 @@
# CHECK-NEXT: Name: <?>
# CHECK-NEXT: BB entries [
# CHECK-NEXT: {
-# CHECK-NEXT: ID: 0
# CHECK-NEXT: Offset: 0x0
# CHECK-NEXT: Size: 0x1
# CHECK-NEXT: HasReturn: No
@@ -34,7 +33,6 @@
# CHECK-NEXT: CanFallThrough: No
# CHECK-NEXT: }
# CHECK-NEXT: {
-# CHECK-NEXT: ID: 2
# CHECK-NEXT: Offset: 0x4
# CHECK-NEXT: Size: 0x4
# CHECK-NEXT: HasReturn: Yes
@@ -49,7 +47,6 @@
# CHECK-NEXT: Name: foo
# CHECK-NEXT: BB entries [
# CHECK-NEXT: {
-# CHECK-NEXT: ID: 4
# CHECK-NEXT: Offset: 0x6
# CHECK-NEXT: Size: 0x7
# CHECK-NEXT: HasReturn: No
@@ -73,7 +70,6 @@
# TRUNCATED-NEXT: Name: bar
# TRUNCATED-NEXT: BB entries [
# TRUNCATED-NEXT: {
-# TRUNCATED-NEXT: ID: 6
# TRUNCATED-NEXT: Offset: 0x9
# TRUNCATED-NEXT: Size: 0xA
# TRUNCATED-NEXT: HasReturn: Yes
@@ -82,7 +78,6 @@
# TRUNCATED-NEXT: CanFallThrough: Yes
# TRUNCATED-NEXT: }
# TRUNCATED-NEXT: {
-# TRUNCATED-NEXT: ID: 7
# TRUNCATED-NEXT: Offset: 0x1F
# TRUNCATED-NEXT: Size: 0xD
# TRUNCATED-NEXT: HasReturn: No
@@ -111,22 +106,19 @@ Sections:
ShSize: [[SIZE=<none>]]
Link: .text
Entries:
- - Version: 2
+ - Version: 1
Address: [[ADDR=0x11111]]
BBEntries:
- - ID: 0
- AddressOffset: 0x0
+ - AddressOffset: 0x0
Size: 0x1
Metadata: 0xF0000002
- - ID: 2
- AddressOffset: 0x3
+ - AddressOffset: 0x3
Size: 0x4
Metadata: 0x5
- - Version: 2
+ - Version: 1
Address: 0x22222
BBEntries:
- - ID: 4
- AddressOffset: 0x6
+ - AddressOffset: 0x6
Size: 0x7
Metadata: 0x8
- Name: dummy_section
@@ -136,15 +128,13 @@ Sections:
Type: SHT_LLVM_BB_ADDR_MAP
Link: .text.bar
Entries:
- - Version: 2
+ - Version: 1
Address: 0x33333
BBEntries:
- - ID: 6
- AddressOffset: 0x9
+ - AddressOffset: 0x9
Size: 0xa
Metadata: 0xb
- - ID: 7
- AddressOffset: 0xc
+ - AddressOffset: 0xc
Size: 0xd
Metadata: 0xe
Symbols:
@@ -175,7 +165,6 @@ Symbols:
# V0-NEXT: Name: foo
# V0-NEXT: BB entries [
# V0-NEXT: {
-# V0-NEXT: ID: 0
# V0-NEXT: Offset: 0x1
# V0-NEXT: Size: 0x2
# V0-NEXT: HasReturn:
@@ -184,7 +173,6 @@ Symbols:
# V0-NEXT: CanFallThrough:
# V0-NEXT: }
# V0-NEXT: {
-# V0-NEXT: ID: 1
# V0-NEXT: Offset: 0x4
# V0-NEXT: Size: 0x5
# V0-NEXT: HasReturn:
@@ -195,36 +183,6 @@ Symbols:
# V0-NEXT: ]
# V0-NEXT: }
-## Check version 1 (without BB IDs).
-# RUN: yaml2obj --docnum=2 %s -DVERSION=1 -DSECTION_TYPE=SHT_LLVM_BB_ADDR_MAP -o %t3
-# RUN: llvm-readobj %t3 --bb-addr-map 2>&1 | FileCheck %s --check-prefix=V1
-
-# V1: BBAddrMap [
-# V1-NEXT: Function {
-# V1-NEXT: At: 0x11111
-# V1-NEXT: Name: foo
-# V1-NEXT: BB entries [
-# V1-NEXT: {
-# V1-NEXT: ID: 0
-# V1-NEXT: Offset: 0x1
-# V1-NEXT: Size: 0x2
-# V1-NEXT: HasReturn:
-# V1-NEXT: HasTailCall:
-# V1-NEXT: IsEHPad:
-# V1-NEXT: CanFallThrough:
-# V1-NEXT: }
-# V1-NEXT: {
-# V1-NEXT: ID: 1
-# V1-NEXT: Offset: 0x7
-# V1-NEXT: Size: 0x5
-# V1-NEXT: HasReturn:
-# V1-NEXT: HasTailCall:
-# V1-NEXT: IsEHPad:
-# V1-NEXT: CanFallThrough:
-# V1-NEXT: }
-# V1-NEXT: ]
-# V1-NEXT: }
-
--- !ELF
FileHeader:
Class: ELFCLASS64
diff --git a/llvm/test/tools/obj2yaml/ELF/bb-addr-map.yaml b/llvm/test/tools/obj2yaml/ELF/bb-addr-map.yaml
index 629c29e202ae..fcd650d3331c 100644
--- a/llvm/test/tools/obj2yaml/ELF/bb-addr-map.yaml
+++ b/llvm/test/tools/obj2yaml/ELF/bb-addr-map.yaml
@@ -15,27 +15,23 @@
# VALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP
# VALID-NEXT: Entries:
## The 'Address' field is omitted when it's zero.
-# VALID-NEXT: - Version: 2
+# VALID-NEXT: - Version: 1
# VALID-NEXT: Feature: 0xFF
# VALID-NEXT: BBEntries:
-# VALID-NEXT: - ID: 0
-# VALID-NEXT: AddressOffset: 0x1
+# VALID-NEXT: - AddressOffset: 0x1
# VALID-NEXT: Size: 0x2
# VALID-NEXT: Metadata: 0x3
-# VALID-NEXT: - ID: 2
-# VALID-NEXT: AddressOffset: 0x4
+# VALID-NEXT: - AddressOffset: 0x4
# VALID-NEXT: Size: 0x5
# VALID-NEXT: Metadata: 0x6
-# VALID-NEXT: - ID: 4
-# VALID-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF7
+# VALID-NEXT: - AddressOffset: 0xFFFFFFFFFFFFFFF7
# VALID-NEXT: Size: 0xFFFFFFFFFFFFFFF8
# VALID-NEXT: Metadata: 0xFFFFFFFFFFFFFFF9
-# VALID-NEXT: - Version: 2
+# VALID-NEXT: - Version: 1
# VALID-NEXT: Feature: 0xEE
# VALID-NEXT: Address: 0xFFFFFFFFFFFFFF20
# VALID-NEXT: BBEntries:
-# VALID-NEXT: - ID: 6
-# VALID-NEXT: AddressOffset: 0xA
+# VALID-NEXT: - AddressOffset: 0xA
# VALID-NEXT: Size: 0xB
# VALID-NEXT: Metadata: 0xC
@@ -49,29 +45,25 @@ Sections:
Type: SHT_LLVM_BB_ADDR_MAP
ShSize: [[SIZE=<none>]]
Entries:
- - Version: 2
+ - Version: 1
Feature: 0xFF
Address: 0x0
BBEntries:
- - ID: 0
- AddressOffset: 0x1
+ - AddressOffset: 0x1
Size: 0x2
Metadata: 0x3
- - ID: 2
- AddressOffset: 0x4
+ - AddressOffset: 0x4
Size: 0x5
Metadata: 0x6
- - ID: 4
- AddressOffset: 0xFFFFFFFFFFFFFFF7
+ - AddressOffset: 0xFFFFFFFFFFFFFFF7
Size: 0xFFFFFFFFFFFFFFF8
Metadata: 0xFFFFFFFFFFFFFFF9
- - Version: 2
+ - Version: 1
Feature: 0xEE
Address: 0xFFFFFFFFFFFFFF20
NumBlocks: [[NUMBLOCKS=<none>]]
BBEntries:
- - ID: 6
- AddressOffset: 0xA
+ - AddressOffset: 0xA
Size: 0xB
Metadata: 0xC
@@ -117,8 +109,7 @@ Sections:
## Fields 'Address' and 'Feature' are omitted when they are zero.
# MULTI-NEXT: - Version: 0
# MULTI-NEXT: BBEntries:
-# MULTI-NEXT: - ID: 0
-# MULTI-NEXT: AddressOffset: 0x1
+# MULTI-NEXT: - AddressOffset: 0x1
# MULTI-NEXT: Size: 0x2
# MULTI-NEXT: Metadata: 0x3
# MULTI-NEXT: - Name: '.llvm_bb_addr_map (1)'
@@ -189,8 +180,7 @@ Sections:
# V0-NEXT: - Version: 0
# V0-NEXT: Address: 0x1111
# V0-NEXT: BBEntries:
-# V0-NEXT: - ID: 0
-# V0-NEXT: AddressOffset: 0x1
+# V0-NEXT: - AddressOffset: 0x1
# V0-NEXT: Size: 0x2
# V0-NEXT: Metadata: 0x3
@@ -209,47 +199,3 @@ Sections:
- AddressOffset: 0x1
Size: 0x2
Metadata: 0x3
-
-## Check obj2yaml for version 1.
-# RUN: yaml2obj --docnum=5 %s -o %t7
-# RUN: obj2yaml %t7 | FileCheck %s --check-prefix=V1
-
-# V1: --- !ELF
-# V1-NEXT: FileHeader:
-# V1-NEXT: Class: ELFCLASS64
-# V1-NEXT: Data: ELFDATA2LSB
-# V1-NEXT: Type: ET_EXEC
-# V1-NEXT: Sections:
-# V1-NEXT: - Name: .llvm_bb_addr_map
-# V1-NEXT: Type: SHT_LLVM_BB_ADDR_MAP
-# V1-NEXT: Entries:
-# V1-NEXT: - Version: 1
-# V1-NEXT: Address: 0x1111
-# V1-NEXT: BBEntries:
-# V1-NEXT: - ID: 0
-# V1-NEXT: AddressOffset: 0x1
-# V1-NEXT: Size: 0x2
-# V1-NEXT: Metadata: 0x3
-# V1-NEXT: - ID: 1
-# V1-NEXT: AddressOffset: 0x4
-# V1-NEXT: Size: 0x5
-# V1-NEXT: Metadata: 0x6
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
-Sections:
- - Name: .llvm_bb_addr_map
- Type: SHT_LLVM_BB_ADDR_MAP
- Entries:
- - Version: 1
- Address: 0x1111
- BBEntries:
- - AddressOffset: 0x1
- Size: 0x2
- Metadata: 0x3
- - AddressOffset: 0x4
- Size: 0x5
- Metadata: 0x6
diff --git a/llvm/test/tools/yaml2obj/ELF/bb-addr-map.yaml b/llvm/test/tools/yaml2obj/ELF/bb-addr-map.yaml
index 2086dc53208b..1ca30f9bb4ba 100644
--- a/llvm/test/tools/yaml2obj/ELF/bb-addr-map.yaml
+++ b/llvm/test/tools/yaml2obj/ELF/bb-addr-map.yaml
@@ -12,13 +12,13 @@
# CHECK-NEXT: ]
# CHECK-NEXT: Address: 0x0
# CHECK-NEXT: Offset: 0x40
-# CHECK-NEXT: Size: 13
+# CHECK-NEXT: Size: 12
# CHECK-NEXT: Link: 0
# CHECK-NEXT: Info: 0
# CHECK-NEXT: AddressAlignment: 0
# CHECK-NEXT: EntrySize: 0
# CHECK-NEXT: SectionData (
-# CHECK-NEXT: 0000: 00000000 00000000 01010203 04
+# CHECK-NEXT: 0000: 00000000 00000000 01010203
# CHECK-NEXT: )
# CHECK-NEXT: }
@@ -36,7 +36,7 @@
# Case 4: Specify Entries.
# CHECK: Name: .llvm_bb_addr_map (1)
# CHECK: SectionData (
-# CHECK-NEXT: 0000: 02002000 00000000 0000010B 010203
+# CHECK-NEXT: 0000: 01002000 00000000 00000101 0203
# CHECK-NEXT: )
# Case 5: Specify Entries and omit the Address field.
@@ -44,13 +44,13 @@
# CHECK: Address:
# CHECK-SAME: {{^ 0x0$}}
# CHECK: SectionData (
-# CHECK-NEXT: 0000: 02000000 00000000 0000010C 010203
+# CHECK-NEXT: 0000: 00000000 00000000 00000101 0203
# CHECK-NEXT: )
# Case 6: Override the NumBlocks field.
# CHECK: Name: .llvm_bb_addr_map (1)
# CHECK: SectionData (
-# CHECK-NEXT: 0000: 02002000 00000000 0000020D 010203
+# CHECK-NEXT: 0000: 01002000 00000000 00000201 0203
# CHECK-NEXT: )
--- !ELF
@@ -67,7 +67,7 @@ Sections:
## Specify Content.
- Name: '.llvm_bb_addr_map (1)'
Type: SHT_LLVM_BB_ADDR_MAP
- Content: "00000000000000000101020304"
+ Content: "000000000000000001010203"
## 2) We can produce an empty .llvm_bb_addr_map section from a description
## with empty section content.
@@ -85,11 +85,10 @@ Sections:
- Name: '.llvm_bb_addr_map (4)'
Type: SHT_LLVM_BB_ADDR_MAP
Entries:
- - Version: 2
+ - Version: 1
Address: 0x0000000000000020
BBEntries:
- - ID: 11
- AddressOffset: 0x00000001
+ - AddressOffset: 0x00000001
Size: 0x00000002
Metadata: 0x00000003
@@ -98,10 +97,9 @@ Sections:
- Name: '.llvm_bb_addr_map (5)'
Type: SHT_LLVM_BB_ADDR_MAP
Entries:
- - Version: 2
+ - Version: 0
BBEntries:
- - ID: 12
- AddressOffset: 0x00000001
+ - AddressOffset: 0x00000001
Size: 0x00000002
Metadata: 0x00000003
@@ -110,12 +108,11 @@ Sections:
- Name: '.llvm_bb_addr_map (6)'
Type: SHT_LLVM_BB_ADDR_MAP
Entries:
- - Version: 2
+ - Version: 1
Address: 0x0000000000000020
NumBlocks: 2
BBEntries:
- - ID: 13
- AddressOffset: 0x00000001
+ - AddressOffset: 0x00000001
Size: 0x00000002
Metadata: 0x00000003
@@ -140,7 +137,7 @@ Sections:
## Check that yaml2obj generates a warning when we use unsupported versions.
# RUN: yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=INVALID-VERSION
-# INVALID-VERSION: warning: unsupported SHT_LLVM_BB_ADDR_MAP version: 3; encoding using the most recent version
+# INVALID-VERSION: warning: unsupported SHT_LLVM_BB_ADDR_MAP version: 2; encoding using the most recent version
--- !ELF
FileHeader:
@@ -152,4 +149,4 @@ Sections:
Type: SHT_LLVM_BB_ADDR_MAP
Entries:
## Specify unsupported version
- - Version: 3
+ - Version: 2
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index d730375a8ac5..7d2b557efd9b 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -7135,7 +7135,6 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printBBAddrMaps() {
ListScope L(W, "BB entries");
for (const BBAddrMap::BBEntry &BBE : AM.BBEntries) {
DictScope L(W);
- W.printNumber("ID", BBE.ID);
W.printHex("Offset", BBE.Offset);
W.printHex("Size", BBE.Size);
W.printBoolean("HasReturn", BBE.HasReturn);
diff --git a/llvm/tools/obj2yaml/elf2yaml.cpp b/llvm/tools/obj2yaml/elf2yaml.cpp
index b55cecebf32c..0c4e841c4746 100644
--- a/llvm/tools/obj2yaml/elf2yaml.cpp
+++ b/llvm/tools/obj2yaml/elf2yaml.cpp
@@ -897,7 +897,7 @@ ELFDumper<ELFT>::dumpBBAddrMapSection(const Elf_Shdr *Shdr) {
while (Cur && Cur.tell() < Content.size()) {
if (Shdr->sh_type == ELF::SHT_LLVM_BB_ADDR_MAP) {
Version = Data.getU8(Cur);
- if (Cur && Version > 2)
+ if (Cur && Version > 1)
return createStringError(
errc::invalid_argument,
"invalid SHT_LLVM_BB_ADDR_MAP section version: " +
@@ -908,12 +908,11 @@ ELFDumper<ELFT>::dumpBBAddrMapSection(const Elf_Shdr *Shdr) {
uint64_t NumBlocks = Data.getULEB128(Cur);
std::vector<ELFYAML::BBAddrMapEntry::BBEntry> BBEntries;
// Read the specified number of BB entries, or until decoding fails.
- for (uint64_t BlockIndex = 0; Cur && BlockIndex < NumBlocks; ++BlockIndex) {
- uint32_t ID = Version >= 2 ? Data.getULEB128(Cur) : BlockIndex;
+ for (uint64_t BlockID = 0; Cur && BlockID < NumBlocks; ++BlockID) {
uint64_t Offset = Data.getULEB128(Cur);
uint64_t Size = Data.getULEB128(Cur);
uint64_t Metadata = Data.getULEB128(Cur);
- BBEntries.push_back({ID, Offset, Size, Metadata});
+ BBEntries.push_back({Offset, Size, Metadata});
}
Entries.push_back(
{Version, Feature, Address, /*NumBlocks=*/{}, std::move(BBEntries)});
diff --git a/llvm/unittests/Object/ELFObjectFileTest.cpp b/llvm/unittests/Object/ELFObjectFileTest.cpp
index 25b187f60343..2591a70b3d58 100644
--- a/llvm/unittests/Object/ELFObjectFileTest.cpp
+++ b/llvm/unittests/Object/ELFObjectFileTest.cpp
@@ -528,7 +528,7 @@ TEST(ELFObjectFileTest, InvalidDecodeBBAddrMap) {
// Check that we can detect unsupported versions.
SmallString<128> UnsupportedVersionYamlString(CommonYamlString);
UnsupportedVersionYamlString += R"(
- Version: 3
+ Version: 2
BBEntries:
- AddressOffset: 0x0
Size: 0x1
@@ -536,14 +536,13 @@ TEST(ELFObjectFileTest, InvalidDecodeBBAddrMap) {
)";
DoCheck(UnsupportedVersionYamlString,
- "unsupported SHT_LLVM_BB_ADDR_MAP version: 3");
+ "unsupported SHT_LLVM_BB_ADDR_MAP version: 2");
SmallString<128> CommonVersionedYamlString(CommonYamlString);
CommonVersionedYamlString += R"(
- Version: 2
+ Version: 1
BBEntries:
- - ID: 1
- AddressOffset: 0x0
+ - AddressOffset: 0x0
Size: 0x1
Metadata: 0x2
)";
@@ -552,9 +551,9 @@ TEST(ELFObjectFileTest, InvalidDecodeBBAddrMap) {
// truncated.
SmallString<128> TruncatedYamlString(CommonVersionedYamlString);
TruncatedYamlString += R"(
- ShSize: 0xb
+ ShSize: 0xa
)";
- DoCheck(TruncatedYamlString, "unable to decode LEB128 at offset 0x0000000b: "
+ DoCheck(TruncatedYamlString, "unable to decode LEB128 at offset 0x0000000a: "
"malformed uleb128, extends past end");
// Check that we can detect when the encoded BB entry fields exceed the UINT32
@@ -562,32 +561,29 @@ TEST(ELFObjectFileTest, InvalidDecodeBBAddrMap) {
SmallVector<SmallString<128>, 3> OverInt32LimitYamlStrings(
3, CommonVersionedYamlString);
OverInt32LimitYamlStrings[0] += R"(
- - ID: 1
- AddressOffset: 0x100000000
+ - AddressOffset: 0x100000000
Size: 0xFFFFFFFF
Metadata: 0xFFFFFFFF
)";
OverInt32LimitYamlStrings[1] += R"(
- - ID: 2
- AddressOffset: 0xFFFFFFFF
+ - AddressOffset: 0xFFFFFFFF
Size: 0x100000000
Metadata: 0xFFFFFFFF
)";
OverInt32LimitYamlStrings[2] += R"(
- - ID: 3
- AddressOffset: 0xFFFFFFFF
+ - AddressOffset: 0xFFFFFFFF
Size: 0xFFFFFFFF
Metadata: 0x100000000
)";
DoCheck(OverInt32LimitYamlStrings[0],
- "ULEB128 value at offset 0x10 exceeds UINT32_MAX (0x100000000)");
+ "ULEB128 value at offset 0xe exceeds UINT32_MAX (0x100000000)");
DoCheck(OverInt32LimitYamlStrings[1],
- "ULEB128 value at offset 0x15 exceeds UINT32_MAX (0x100000000)");
+ "ULEB128 value at offset 0x13 exceeds UINT32_MAX (0x100000000)");
DoCheck(OverInt32LimitYamlStrings[2],
- "ULEB128 value at offset 0x1a exceeds UINT32_MAX (0x100000000)");
+ "ULEB128 value at offset 0x18 exceeds UINT32_MAX (0x100000000)");
// Check the proper error handling when the section has fields exceeding
// UINT32 and is also truncated. This is for checking that we don't generate
@@ -596,24 +592,24 @@ TEST(ELFObjectFileTest, InvalidDecodeBBAddrMap) {
3, OverInt32LimitYamlStrings[1]);
// Truncate before the end of the 5-byte field.
OverInt32LimitAndTruncated[0] += R"(
- ShSize: 0x19
+ ShSize: 0x17
)";
// Truncate at the end of the 5-byte field.
OverInt32LimitAndTruncated[1] += R"(
- ShSize: 0x1a
+ ShSize: 0x18
)";
// Truncate after the end of the 5-byte field.
OverInt32LimitAndTruncated[2] += R"(
- ShSize: 0x1b
+ ShSize: 0x19
)";
DoCheck(OverInt32LimitAndTruncated[0],
- "unable to decode LEB128 at offset 0x00000015: malformed uleb128, "
+ "unable to decode LEB128 at offset 0x00000013: malformed uleb128, "
"extends past end");
DoCheck(OverInt32LimitAndTruncated[1],
- "ULEB128 value at offset 0x15 exceeds UINT32_MAX (0x100000000)");
+ "ULEB128 value at offset 0x13 exceeds UINT32_MAX (0x100000000)");
DoCheck(OverInt32LimitAndTruncated[2],
- "ULEB128 value at offset 0x15 exceeds UINT32_MAX (0x100000000)");
+ "ULEB128 value at offset 0x13 exceeds UINT32_MAX (0x100000000)");
// Check for proper error handling when the 'NumBlocks' field is overridden
// with an out-of-range value.
@@ -639,57 +635,41 @@ TEST(ELFObjectFileTest, ReadBBAddrMap) {
Type: SHT_LLVM_BB_ADDR_MAP
Link: 1
Entries:
- - Version: 2
+ - Version: 1
Address: 0x11111
BBEntries:
- - ID: 1
- AddressOffset: 0x0
+ - AddressOffset: 0x0
Size: 0x1
Metadata: 0x2
- Name: .llvm_bb_addr_map_2
Type: SHT_LLVM_BB_ADDR_MAP
Link: 1
Entries:
- - Version: 2
+ - Version: 1
Address: 0x22222
BBEntries:
- - ID: 2
- AddressOffset: 0x0
+ - AddressOffset: 0x0
Size: 0x2
Metadata: 0x4
- - Name: .llvm_bb_addr_map_3
- Type: SHT_LLVM_BB_ADDR_MAP
- Link: 2
+ - Name: .llvm_bb_addr_map
+ Type: SHT_LLVM_BB_ADDR_MAP_V0
+ # Link: 0 (by default)
Entries:
- - Version: 1
+ - Version: 0
Address: 0x33333
BBEntries:
- - ID: 0
- AddressOffset: 0x0
+ - AddressOffset: 0x0
Size: 0x3
Metadata: 0x6
- - Name: .llvm_bb_addr_map_4
- Type: SHT_LLVM_BB_ADDR_MAP_V0
- # Link: 0 (by default, can be overriden)
- Entries:
- - Version: 0
- Address: 0x44444
- BBEntries:
- - ID: 0
- AddressOffset: 0x0
- Size: 0x4
- Metadata: 0x8
)");
- BBAddrMap E1 = {0x11111, {{1, 0x0, 0x1, 0x2}}};
- BBAddrMap E2 = {0x22222, {{2, 0x0, 0x2, 0x4}}};
- BBAddrMap E3 = {0x33333, {{0, 0x0, 0x3, 0x6}}};
- BBAddrMap E4 = {0x44444, {{0, 0x0, 0x4, 0x8}}};
+ BBAddrMap E1 = {0x11111, {{0x0, 0x1, 0x2}}};
+ BBAddrMap E2 = {0x22222, {{0x0, 0x2, 0x4}}};
+ BBAddrMap E3 = {0x33333, {{0x0, 0x3, 0x6}}};
- std::vector<BBAddrMap> Section0BBAddrMaps = {E4};
- std::vector<BBAddrMap> Section1BBAddrMaps = {E3};
- std::vector<BBAddrMap> Section2BBAddrMaps = {E1, E2};
- std::vector<BBAddrMap> AllBBAddrMaps = {E1, E2, E3, E4};
+ std::vector<BBAddrMap> Section0BBAddrMaps = {E3};
+ std::vector<BBAddrMap> Section1BBAddrMaps = {E1, E2};
+ std::vector<BBAddrMap> AllBBAddrMaps = {E1, E2, E3};
auto DoCheckSucceeds = [&](StringRef YamlString,
std::optional<unsigned> TextSectionIndex,
@@ -726,11 +706,10 @@ TEST(ELFObjectFileTest, ReadBBAddrMap) {
DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/std::nullopt,
AllBBAddrMaps);
DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/0, Section0BBAddrMaps);
- DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/2, Section1BBAddrMaps);
- DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/1, Section2BBAddrMaps);
+ DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/1, Section1BBAddrMaps);
// Check that when no bb-address-map section is found for a text section,
// we return an empty result.
- DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/3, {});
+ DoCheckSucceeds(CommonYamlString, /*TextSectionIndex=*/2, {});
// Check that we detect when a bb-addr-map section is linked to an invalid
// (not present) section.
@@ -739,9 +718,9 @@ TEST(ELFObjectFileTest, ReadBBAddrMap) {
Link: 10
)";
- DoCheckFails(InvalidLinkedYamlString, /*TextSectionIndex=*/4,
+ DoCheckFails(InvalidLinkedYamlString, /*TextSectionIndex=*/1,
"unable to get the linked-to section for "
- "SHT_LLVM_BB_ADDR_MAP_V0 section with index 4: invalid section "
+ "SHT_LLVM_BB_ADDR_MAP_V0 section with index 3: invalid section "
"index: 10");
// Linked sections are not checked when we don't target a specific text
// section.
@@ -755,12 +734,12 @@ TEST(ELFObjectFileTest, ReadBBAddrMap) {
)";
DoCheckFails(TruncatedYamlString, /*TextSectionIndex=*/std::nullopt,
- "unable to read SHT_LLVM_BB_ADDR_MAP_V0 section with index 4: "
+ "unable to read SHT_LLVM_BB_ADDR_MAP_V0 section with index 3: "
"unable to decode LEB128 at offset 0x00000008: malformed "
"uleb128, extends past end");
// Check that we can read the other section's bb-address-maps which are
// valid.
- DoCheckSucceeds(TruncatedYamlString, /*TextSectionIndex=*/2,
+ DoCheckSucceeds(TruncatedYamlString, /*TextSectionIndex=*/1,
Section1BBAddrMaps);
}
More information about the llvm-commits
mailing list