diff options
author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2017-12-13 10:30:51 +0000 |
---|---|---|
committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2017-12-13 10:30:51 +0000 |
commit | b3a0d513749623b8ee51183c127be74350052426 (patch) | |
tree | 150eba20d019bb866ef70b22fc74f2ee9007b34a /llvm/lib/CodeGen/MachineOperand.cpp | |
parent | 26ae8a6582c8c420b222e5b672c6845e182340f5 (diff) | |
download | bcm5719-llvm-b3a0d513749623b8ee51183c127be74350052426.tar.gz bcm5719-llvm-b3a0d513749623b8ee51183c127be74350052426.zip |
[CodeGen] Print target index operands as target-index(target-specific) + 8 in both MIR and debug output
Work towards the unification of MIR and debug output by printing `target-index(target-specific) + 8` instead of `<ti#0+8>` and `target-index(target-specific) + 8` instead of `<ti#0-8>`.
Only debug syntax is affected.
llvm-svn: 320565
Diffstat (limited to 'llvm/lib/CodeGen/MachineOperand.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineOperand.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp index 2a2f8f29c48..cd8c86e782a 100644 --- a/llvm/lib/CodeGen/MachineOperand.cpp +++ b/llvm/lib/CodeGen/MachineOperand.cpp @@ -15,6 +15,7 @@ #include "llvm/Analysis/Loads.h" #include "llvm/CodeGen/MIRPrinter.h" #include "llvm/CodeGen/MachineRegisterInfo.h" +#include "llvm/CodeGen/TargetInstrInfo.h" #include "llvm/CodeGen/TargetRegisterInfo.h" #include "llvm/IR/Constants.h" #include "llvm/IR/ModuleSlotTracker.h" @@ -386,6 +387,18 @@ static void printOffset(raw_ostream &OS, int64_t Offset) { OS << " + " << Offset; } +static const char *getTargetIndexName(const MachineFunction &MF, int Index) { + const auto *TII = MF.getSubtarget().getInstrInfo(); + assert(TII && "expected instruction info"); + auto Indices = TII->getSerializableTargetIndices(); + auto Found = find_if(Indices, [&](const std::pair<int, const char *> &I) { + return I.first == Index; + }); + if (Found != Indices.end()) + return Found->second; + return nullptr; +} + void MachineOperand::printSubregIdx(raw_ostream &OS, uint64_t Index, const TargetRegisterInfo *TRI) { OS << "%subreg."; @@ -499,12 +512,16 @@ void MachineOperand::print(raw_ostream &OS, ModuleSlotTracker &MST, OS << "%const." << getIndex(); printOffset(OS, getOffset()); break; - case MachineOperand::MO_TargetIndex: - OS << "<ti#" << getIndex(); - if (getOffset()) - OS << "+" << getOffset(); - OS << '>'; + case MachineOperand::MO_TargetIndex: { + OS << "target-index("; + const char *Name = "<unknown>"; + if (const MachineFunction *MF = getMFIfAvailable(*this)) + if (const auto *TargetIndexName = getTargetIndexName(*MF, getIndex())) + Name = TargetIndexName; + OS << Name << ')'; + printOffset(OS, getOffset()); break; + } case MachineOperand::MO_JumpTableIndex: OS << "<jt#" << getIndex() << '>'; break; |