Skip to content

Commit

Permalink
machine combiner: fix pretty printer
Browse files Browse the repository at this point in the history
we used to print UNKNOWN instructions when the instruction to be printer was not
yet inserted in any BB: in that case the pretty printer would not be able to
compute a TII as the instruction does not belong to any BB or function yet.
This patch explicitly passes the TII to the pretty-printer.

Differential Revision: https://reviews.llvm.org/D27645

llvm-svn: 290228
  • Loading branch information
sebpop committed Dec 21, 2016
1 parent 16d3150 commit 7779484
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 12 deletions.
9 changes: 5 additions & 4 deletions llvm/include/llvm/CodeGen/MachineInstr.h
Expand Up @@ -1149,10 +1149,11 @@ class MachineInstr
//
// Debugging support
//
void print(raw_ostream &OS, bool SkipOpers = false) const;
void print(raw_ostream &OS, ModuleSlotTracker &MST,
bool SkipOpers = false) const;
void dump() const;
void print(raw_ostream &OS, bool SkipOpers = false,
const TargetInstrInfo *TII = nullptr) const;
void print(raw_ostream &OS, ModuleSlotTracker &MST, bool SkipOpers = false,
const TargetInstrInfo *TII = nullptr) const;
void dump(const TargetInstrInfo *TII = nullptr) const;

//===--------------------------------------------------------------------===//
// Accessors used to build up machine instructions.
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/MachineCombiner.cpp
Expand Up @@ -135,7 +135,7 @@ MachineCombiner::getDepth(SmallVectorImpl<MachineInstr *> &InsInstrs,
// are tracked in the InstrIdxForVirtReg map depth is looked up in InstrDepth
for (auto *InstrPtr : InsInstrs) { // for each Use
unsigned IDepth = 0;
DEBUG(dbgs() << "NEW INSTR "; InstrPtr->dump(); dbgs() << "\n";);
DEBUG(dbgs() << "NEW INSTR "; InstrPtr->dump(TII); dbgs() << "\n";);
for (const MachineOperand &MO : InstrPtr->operands()) {
// Check for virtual register operand.
if (!(MO.isReg() && TargetRegisterInfo::isVirtualRegister(MO.getReg())))
Expand Down
16 changes: 9 additions & 7 deletions llvm/lib/CodeGen/MachineInstr.cpp
Expand Up @@ -1692,37 +1692,39 @@ void MachineInstr::copyImplicitOps(MachineFunction &MF,
}
}

LLVM_DUMP_METHOD void MachineInstr::dump() const {
LLVM_DUMP_METHOD void MachineInstr::dump(const TargetInstrInfo *TII) const {
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
dbgs() << " " << *this;
dbgs() << " ";
print(dbgs(), false /* SkipOpers */, TII);
#endif
}

void MachineInstr::print(raw_ostream &OS, bool SkipOpers) const {
void MachineInstr::print(raw_ostream &OS, bool SkipOpers,
const TargetInstrInfo *TII) const {
const Module *M = nullptr;
if (const MachineBasicBlock *MBB = getParent())
if (const MachineFunction *MF = MBB->getParent())
M = MF->getFunction()->getParent();

ModuleSlotTracker MST(M);
print(OS, MST, SkipOpers);
print(OS, MST, SkipOpers, TII);
}

void MachineInstr::print(raw_ostream &OS, ModuleSlotTracker &MST,
bool SkipOpers) const {
bool SkipOpers, const TargetInstrInfo *TII) const {
// We can be a bit tidier if we know the MachineFunction.
const MachineFunction *MF = nullptr;
const TargetRegisterInfo *TRI = nullptr;
const MachineRegisterInfo *MRI = nullptr;
const TargetInstrInfo *TII = nullptr;
const TargetIntrinsicInfo *IntrinsicInfo = nullptr;

if (const MachineBasicBlock *MBB = getParent()) {
MF = MBB->getParent();
if (MF) {
MRI = &MF->getRegInfo();
TRI = MF->getSubtarget().getRegisterInfo();
TII = MF->getSubtarget().getInstrInfo();
if (!TII)
TII = MF->getSubtarget().getInstrInfo();
IntrinsicInfo = MF->getTarget().getIntrinsicInfo();
}
}
Expand Down
5 changes: 5 additions & 0 deletions llvm/test/CodeGen/AArch64/machine-combiner-madd.ll
Expand Up @@ -7,6 +7,11 @@
; RUN: llc -mtriple=aarch64-linux-gnu -mcpu=exynos-m2 < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-linux-gnu -mcpu=kryo < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-linux-gnu -mcpu=vulcan < %s | FileCheck %s
; RUN: llc -mtriple=aarch64-linux-gnu -mcpu=cortex-a57 -debug-only=machine-combiner < %s 2>&1 > /dev/null | FileCheck %s --check-prefix COMBINE-DUMP

; The machine-combiner debugging dumps should print the new instruction.
; COMBINE-DUMP: NEW INSTR{{.*}}MADDXrrr
; COMBINE-DUMP-NOT: NEW INSTR{{.*}}UNKNOWN

; Make sure that inst-combine fuses the multiply add in the addressing mode of
; the load.
Expand Down

0 comments on commit 7779484

Please sign in to comment.