[llvm] c651c08 - [CodeGen] Add standard print/debug utilities to EVT
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 7 08:38:55 PST 2023
Author: Philip Reames
Date: 2023-02-07T08:38:44-08:00
New Revision: c651c0878ffb8a67d77d3749001fbf780f44d953
URL: https://github.com/llvm/llvm-project/commit/c651c0878ffb8a67d77d3749001fbf780f44d953
DIFF: https://github.com/llvm/llvm-project/commit/c651c0878ffb8a67d77d3749001fbf780f44d953.diff
LOG: [CodeGen] Add standard print/debug utilities to EVT
Doing so makes it easier to do printf style debugging in idiomatic manner. I followed the code structure of Value with only the definition of dump being #ifdef out in non-debug builds. Not sure if this is the "right" option; we don't seem to have any single consistent scheme on how dump is handled.
Differential Revision: https://reviews.llvm.org/D143454
Added:
Modified:
llvm/include/llvm/CodeGen/ValueTypes.h
llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
llvm/lib/CodeGen/ValueTypes.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/ValueTypes.h b/llvm/include/llvm/CodeGen/ValueTypes.h
index af4c8ab40e823..9818ff2ee0ca0 100644
--- a/llvm/include/llvm/CodeGen/ValueTypes.h
+++ b/llvm/include/llvm/CodeGen/ValueTypes.h
@@ -456,6 +456,14 @@ namespace llvm {
/// This function returns value type as a string, e.g. "i32".
std::string getEVTString() const;
+ /// Support for debugging, callable in GDB: VT.dump()
+ void dump() const;
+
+ /// Implement operator<<.
+ void print(raw_ostream &OS) const {
+ OS << getEVTString();
+ }
+
/// This method returns an LLVM type corresponding to the specified EVT.
/// For integer types, this returns an unsigned type. Note that this will
/// abort for types that cannot be represented.
@@ -516,6 +524,10 @@ namespace llvm {
TypeSize getExtendedSizeInBits() const LLVM_READONLY;
};
+ inline raw_ostream &operator<<(raw_ostream &OS, const EVT &V) {
+ V.print(OS);
+ return OS;
+ }
} // end namespace llvm
#endif // LLVM_CODEGEN_VALUETYPES_H
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
index 5e03495931393..b054b63f72699 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
@@ -245,8 +245,7 @@ bool DAGTypeLegalizer::run() {
// types are illegal.
for (unsigned i = 0, NumResults = N->getNumValues(); i < NumResults; ++i) {
EVT ResultVT = N->getValueType(i);
- LLVM_DEBUG(dbgs() << "Analyzing result type: " << ResultVT.getEVTString()
- << "\n");
+ LLVM_DEBUG(dbgs() << "Analyzing result type: " << ResultVT << "\n");
switch (getTypeAction(ResultVT)) {
case TargetLowering::TypeLegal:
LLVM_DEBUG(dbgs() << "Legal result type\n");
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
index fe4261291fc5f..9f2662af027c2 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
@@ -698,7 +698,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
else
OS << "<null>";
} else if (const VTSDNode *N = dyn_cast<VTSDNode>(this)) {
- OS << ":" << N->getVT().getEVTString();
+ OS << ":" << N->getVT();
}
else if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(this)) {
OS << "<";
@@ -713,7 +713,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
case ISD::ZEXTLOAD: OS << ", zext"; break;
}
if (doExt)
- OS << " from " << LD->getMemoryVT().getEVTString();
+ OS << " from " << LD->getMemoryVT();
const char *AM = getIndexedModeName(LD->getAddressingMode());
if (*AM)
@@ -725,7 +725,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
printMemOperand(OS, *ST->getMemOperand(), G);
if (ST->isTruncatingStore())
- OS << ", trunc to " << ST->getMemoryVT().getEVTString();
+ OS << ", trunc to " << ST->getMemoryVT();
const char *AM = getIndexedModeName(ST->getAddressingMode());
if (*AM)
@@ -745,7 +745,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
case ISD::ZEXTLOAD: OS << ", zext"; break;
}
if (doExt)
- OS << " from " << MLd->getMemoryVT().getEVTString();
+ OS << " from " << MLd->getMemoryVT();
const char *AM = getIndexedModeName(MLd->getAddressingMode());
if (*AM)
@@ -760,7 +760,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
printMemOperand(OS, *MSt->getMemOperand(), G);
if (MSt->isTruncatingStore())
- OS << ", trunc to " << MSt->getMemoryVT().getEVTString();
+ OS << ", trunc to " << MSt->getMemoryVT();
const char *AM = getIndexedModeName(MSt->getAddressingMode());
if (*AM)
@@ -782,7 +782,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
case ISD::ZEXTLOAD: OS << ", zext"; break;
}
if (doExt)
- OS << " from " << MGather->getMemoryVT().getEVTString();
+ OS << " from " << MGather->getMemoryVT();
auto Signed = MGather->isIndexSigned() ? "signed" : "unsigned";
auto Scaled = MGather->isIndexScaled() ? "scaled" : "unscaled";
@@ -794,7 +794,7 @@ void SDNode::print_details(raw_ostream &OS, const SelectionDAG *G) const {
printMemOperand(OS, *MScatter->getMemOperand(), G);
if (MScatter->isTruncatingStore())
- OS << ", trunc to " << MScatter->getMemoryVT().getEVTString();
+ OS << ", trunc to " << MScatter->getMemoryVT();
auto Signed = MScatter->isIndexSigned() ? "signed" : "unsigned";
auto Scaled = MScatter->isIndexScaled() ? "scaled" : "unscaled";
diff --git a/llvm/lib/CodeGen/ValueTypes.cpp b/llvm/lib/CodeGen/ValueTypes.cpp
index 608434800bc39..8530a8da00732 100644
--- a/llvm/lib/CodeGen/ValueTypes.cpp
+++ b/llvm/lib/CodeGen/ValueTypes.cpp
@@ -10,6 +10,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Type.h"
+#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/TypeSize.h"
#include "llvm/Support/WithColor.h"
@@ -176,6 +177,13 @@ std::string EVT::getEVTString() const {
}
}
+#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
+void EVT::dump() const {
+ print(dbgs());
+ dbgs() << "\n";
+}
+#endif
+
/// getTypeForEVT - This method returns an LLVM type corresponding to the
/// specified EVT. For integer types, this returns an unsigned type. Note
/// that this will abort for types that cannot be represented.
More information about the llvm-commits
mailing list