[llvm] 5934df0 - MachineBasicBlock: add printName method
Nicolai Hähnle via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 24 09:19:02 PDT 2020
Author: Nicolai Hähnle
Date: 2020-07-24T18:18:09+02:00
New Revision: 5934df0c9abe94fc450fbcf0ceca21cf838840e9
URL: https://github.com/llvm/llvm-project/commit/5934df0c9abe94fc450fbcf0ceca21cf838840e9
DIFF: https://github.com/llvm/llvm-project/commit/5934df0c9abe94fc450fbcf0ceca21cf838840e9.diff
LOG: MachineBasicBlock: add printName method
Common up some existing MBB name printing logic into a single place.
Note that basic block dumping now prints the same set of attributes as
the MIRPrinter.
Change-Id: I8f022bbd922e831bc96d63143d7472c03282530b
Differential Revision: https://reviews.llvm.org/D83253
Added:
Modified:
llvm/include/llvm/CodeGen/MachineBasicBlock.h
llvm/lib/CodeGen/MIRPrinter.cpp
llvm/lib/CodeGen/MachineBasicBlock.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h
index d6cb7211cf70..0360e706cbc4 100644
--- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h
+++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h
@@ -872,6 +872,14 @@ class MachineBasicBlock
void print(raw_ostream &OS, ModuleSlotTracker &MST,
const SlotIndexes * = nullptr, bool IsStandalone = true) const;
+ enum PrintNameFlag {
+ PrintNameIr = (1 << 0), ///< Add IR name where available
+ PrintNameAttributes = (1 << 1), ///< Print attributes
+ };
+
+ void printName(raw_ostream &os, unsigned printNameFlags = PrintNameIr,
+ ModuleSlotTracker *moduleSlotTracker = nullptr) const;
+
// Printing method used by LoopInfo.
void printAsOperand(raw_ostream &OS, bool PrintType = true) const;
diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp
index fa23df6288e9..dde0dc456c05 100644
--- a/llvm/lib/CodeGen/MIRPrinter.cpp
+++ b/llvm/lib/CodeGen/MIRPrinter.cpp
@@ -608,58 +608,10 @@ bool MIPrinter::canPredictSuccessors(const MachineBasicBlock &MBB) const {
void MIPrinter::print(const MachineBasicBlock &MBB) {
assert(MBB.getNumber() >= 0 && "Invalid MBB number");
- OS << "bb." << MBB.getNumber();
- bool HasAttributes = false;
- if (const auto *BB = MBB.getBasicBlock()) {
- if (BB->hasName()) {
- OS << "." << BB->getName();
- } else {
- HasAttributes = true;
- OS << " (";
- int Slot = MST.getLocalSlot(BB);
- if (Slot == -1)
- OS << "<ir-block badref>";
- else
- OS << (Twine("%ir-block.") + Twine(Slot)).str();
- }
- }
- if (MBB.hasAddressTaken()) {
- OS << (HasAttributes ? ", " : " (");
- OS << "address-taken";
- HasAttributes = true;
- }
- if (MBB.isEHPad()) {
- OS << (HasAttributes ? ", " : " (");
- OS << "landing-pad";
- HasAttributes = true;
- }
- if (MBB.isEHFuncletEntry()) {
- OS << (HasAttributes ? ", " : " (");
- OS << "ehfunclet-entry";
- HasAttributes = true;
- }
- if (MBB.getAlignment() != Align(1)) {
- OS << (HasAttributes ? ", " : " (");
- OS << "align " << MBB.getAlignment().value();
- HasAttributes = true;
- }
- if (MBB.getSectionID() != MBBSectionID(0)) {
- OS << (HasAttributes ? ", " : " (");
- OS << "bbsections ";
- switch (MBB.getSectionID().Type) {
- case MBBSectionID::SectionType::Exception:
- OS << "Exception";
- break;
- case MBBSectionID::SectionType::Cold:
- OS << "Cold";
- break;
- default:
- OS << MBB.getSectionID().Number;
- }
- HasAttributes = true;
- }
- if (HasAttributes)
- OS << ")";
+ MBB.printName(OS,
+ MachineBasicBlock::PrintNameIr |
+ MachineBasicBlock::PrintNameAttributes,
+ &MST);
OS << ":\n";
bool HasLineAttributes = false;
diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp
index 2d4b60435d96..626c04074a61 100644
--- a/llvm/lib/CodeGen/MachineBasicBlock.cpp
+++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp
@@ -338,39 +338,7 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,
if (Indexes && PrintSlotIndexes)
OS << Indexes->getMBBStartIdx(this) << '\t';
- OS << "bb." << getNumber();
- bool HasAttributes = false;
- if (const auto *BB = getBasicBlock()) {
- if (BB->hasName()) {
- OS << "." << BB->getName();
- } else {
- HasAttributes = true;
- OS << " (";
- int Slot = MST.getLocalSlot(BB);
- if (Slot == -1)
- OS << "<ir-block badref>";
- else
- OS << (Twine("%ir-block.") + Twine(Slot)).str();
- }
- }
-
- if (hasAddressTaken()) {
- OS << (HasAttributes ? ", " : " (");
- OS << "address-taken";
- HasAttributes = true;
- }
- if (isEHPad()) {
- OS << (HasAttributes ? ", " : " (");
- OS << "landing-pad";
- HasAttributes = true;
- }
- if (getAlignment() != Align(1)) {
- OS << (HasAttributes ? ", " : " (");
- OS << "align " << Log2(getAlignment());
- HasAttributes = true;
- }
- if (HasAttributes)
- OS << ")";
+ printName(OS, PrintNameIr | PrintNameAttributes, &MST);
OS << ":\n";
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
@@ -478,9 +446,99 @@ void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,
}
}
+/// Print the basic block's name as:
+///
+/// bb.{number}[.{ir-name}] [(attributes...)]
+///
+/// The {ir-name} is only printed when the \ref PrintNameIr flag is passed
+/// (which is the default). If the IR block has no name, it is identified
+/// numerically using the attribute syntax as "(%ir-block.{ir-slot})".
+///
+/// When the \ref PrintNameAttributes flag is passed, additional attributes
+/// of the block are printed when set.
+///
+/// \param printNameFlags Combination of \ref PrintNameFlag flags indicating
+/// the parts to print.
+/// \param moduleSlotTracker Optional ModuleSlotTracker. This method will
+/// incorporate its own tracker when necessary to
+/// determine the block's IR name.
+void MachineBasicBlock::printName(raw_ostream &os, unsigned printNameFlags,
+ ModuleSlotTracker *moduleSlotTracker) const {
+ os << "bb." << getNumber();
+ bool hasAttributes = false;
+
+ if (printNameFlags & PrintNameIr) {
+ if (const auto *bb = getBasicBlock()) {
+ if (bb->hasName()) {
+ os << '.' << bb->getName();
+ } else {
+ hasAttributes = true;
+ os << " (";
+
+ int slot = -1;
+
+ if (moduleSlotTracker) {
+ slot = moduleSlotTracker->getLocalSlot(bb);
+ } else if (bb->getParent()) {
+ ModuleSlotTracker tmpTracker(bb->getModule(), false);
+ tmpTracker.incorporateFunction(*bb->getParent());
+ slot = tmpTracker.getLocalSlot(bb);
+ }
+
+ if (slot == -1)
+ os << "<ir-block badref>";
+ else
+ os << (Twine("%ir-block.") + Twine(slot)).str();
+ }
+ }
+ }
+
+ if (printNameFlags & PrintNameAttributes) {
+ if (hasAddressTaken()) {
+ os << (hasAttributes ? ", " : " (");
+ os << "address-taken";
+ hasAttributes = true;
+ }
+ if (isEHPad()) {
+ os << (hasAttributes ? ", " : " (");
+ os << "landing-pad";
+ hasAttributes = true;
+ }
+ if (isEHFuncletEntry()) {
+ os << (hasAttributes ? ", " : " (");
+ os << "ehfunclet-entry";
+ hasAttributes = true;
+ }
+ if (getAlignment() != Align(1)) {
+ os << (hasAttributes ? ", " : " (");
+ os << "align " << getAlignment().value();
+ hasAttributes = true;
+ }
+ if (getSectionID() != MBBSectionID(0)) {
+ os << (hasAttributes ? ", " : " (");
+ os << "bbsections ";
+ switch (getSectionID().Type) {
+ case MBBSectionID::SectionType::Exception:
+ os << "Exception";
+ break;
+ case MBBSectionID::SectionType::Cold:
+ os << "Cold";
+ break;
+ default:
+ os << getSectionID().Number;
+ }
+ hasAttributes = true;
+ }
+ }
+
+ if (hasAttributes)
+ os << ')';
+}
+
void MachineBasicBlock::printAsOperand(raw_ostream &OS,
bool /*PrintType*/) const {
- OS << "%bb." << getNumber();
+ OS << '%';
+ printName(OS, 0);
}
void MachineBasicBlock::removeLiveIn(MCPhysReg Reg, LaneBitmask LaneMask) {
More information about the llvm-commits
mailing list