forked from OSchip/llvm-project
[MachineInstr] Add a dumpr method
Add a dump method that recursively prints an instruction and all the instructions defining its operands and so on. This is helpful when looking at combiner issue. NFC Differential Revision: https://reviews.llvm.org/D75094
This commit is contained in:
parent
eb1c040b41
commit
a12f1d6a52
|
@ -262,6 +262,10 @@ private:
|
|||
// MachineInstrs are pool-allocated and owned by MachineFunction.
|
||||
friend class MachineFunction;
|
||||
|
||||
void
|
||||
dumprImpl(const MachineRegisterInfo &MRI, unsigned Depth, unsigned MaxDepth,
|
||||
SmallPtrSetImpl<const MachineInstr *> &AlreadySeenInstrs) const;
|
||||
|
||||
public:
|
||||
MachineInstr(const MachineInstr &) = delete;
|
||||
MachineInstr &operator=(const MachineInstr &) = delete;
|
||||
|
@ -1534,6 +1538,10 @@ public:
|
|||
bool AddNewLine = true,
|
||||
const TargetInstrInfo *TII = nullptr) const;
|
||||
void dump() const;
|
||||
/// Print on dbgs() the current instruction and the instructions defining its
|
||||
/// operands and so on until we reach \p MaxDepth.
|
||||
void dumpr(const MachineRegisterInfo &MRI,
|
||||
unsigned MaxDepth = UINT_MAX) const;
|
||||
/// @}
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Support/FormattedStream.h"
|
||||
#include "llvm/Support/LowLevelTypeImpl.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
@ -1463,6 +1464,37 @@ LLVM_DUMP_METHOD void MachineInstr::dump() const {
|
|||
dbgs() << " ";
|
||||
print(dbgs());
|
||||
}
|
||||
|
||||
LLVM_DUMP_METHOD void MachineInstr::dumprImpl(
|
||||
const MachineRegisterInfo &MRI, unsigned Depth, unsigned MaxDepth,
|
||||
SmallPtrSetImpl<const MachineInstr *> &AlreadySeenInstrs) const {
|
||||
if (Depth >= MaxDepth)
|
||||
return;
|
||||
if (!AlreadySeenInstrs.insert(this).second)
|
||||
return;
|
||||
// PadToColumn always inserts at least one space.
|
||||
// Don't mess up the alignment if we don't want any space.
|
||||
if (Depth)
|
||||
fdbgs().PadToColumn(Depth * 2);
|
||||
print(fdbgs());
|
||||
for (const MachineOperand &MO : operands()) {
|
||||
if (!MO.isReg() || MO.isDef())
|
||||
continue;
|
||||
Register Reg = MO.getReg();
|
||||
if (Reg.isPhysical())
|
||||
continue;
|
||||
const MachineInstr *NewMI = MRI.getUniqueVRegDef(Reg);
|
||||
if (NewMI == nullptr)
|
||||
continue;
|
||||
NewMI->dumprImpl(MRI, Depth + 1, MaxDepth, AlreadySeenInstrs);
|
||||
}
|
||||
}
|
||||
|
||||
LLVM_DUMP_METHOD void MachineInstr::dumpr(const MachineRegisterInfo &MRI,
|
||||
unsigned MaxDepth) const {
|
||||
SmallPtrSet<const MachineInstr *, 16> AlreadySeenInstrs;
|
||||
dumprImpl(MRI, 0, MaxDepth, AlreadySeenInstrs);
|
||||
}
|
||||
#endif
|
||||
|
||||
void MachineInstr::print(raw_ostream &OS, bool IsStandalone, bool SkipOpers,
|
||||
|
|
Loading…
Reference in New Issue