diff options
| author | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2017-02-23 21:05:33 +0000 |
|---|---|---|
| committer | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2017-02-23 21:05:33 +0000 |
| commit | 272739751d87cb9438762b780a9f52e241d16553 (patch) | |
| tree | 5a134cde6dfbc0a3d9dd0b8720f545d415fc9861 | |
| parent | 97119d48db056cd446e44cbf4561f695b4e54fb3 (diff) | |
| download | bcm5719-llvm-272739751d87cb9438762b780a9f52e241d16553.tar.gz bcm5719-llvm-272739751d87cb9438762b780a9f52e241d16553.zip | |
[CodeGen] Teach opt remarks how to print MI instructions.
This will be used with GISel opt remarks.
llvm-svn: 296012
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h | 12 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp | 10 |
2 files changed, 22 insertions, 0 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h b/llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h index 345e70ecbf4..a4096320b98 100644 --- a/llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h +++ b/llvm/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h @@ -22,6 +22,7 @@ namespace llvm { class MachineBasicBlock; class MachineBlockFrequencyInfo; +class MachineInstr; /// \brief Common features for diagnostics dealing with optimization remarks /// that are used by machine passes. @@ -34,6 +35,12 @@ public: *MBB->getParent()->getFunction(), DLoc), MBB(MBB) {} + /// MI-specific kinds of diagnostic Arguments. + struct MachineArgument : public DiagnosticInfoOptimizationBase::Argument { + /// Print an entire MachineInstr. + MachineArgument(StringRef Key, const MachineInstr &MI); + }; + static bool classof(const DiagnosticInfo *DI) { return DI->getKind() >= DK_FirstMachineRemark && DI->getKind() <= DK_LastMachineRemark; @@ -116,6 +123,11 @@ public: } }; +/// Extend llvm::ore:: with MI-specific helper names. +namespace ore { +using MNV = DiagnosticInfoMIROptimization::MachineArgument; +} + /// The optimization diagnostic interface. /// /// It allows reporting when optimizations are performed and when they are not diff --git a/llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp b/llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp index b226135f8f7..6b6b5f2814a 100644 --- a/llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp +++ b/llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp @@ -15,12 +15,22 @@ #include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h" #include "llvm/CodeGen/LazyMachineBlockFrequencyInfo.h" +#include "llvm/CodeGen/MachineInstr.h" #include "llvm/IR/DebugInfo.h" #include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/LLVMContext.h" using namespace llvm; +DiagnosticInfoMIROptimization::MachineArgument::MachineArgument( + StringRef MKey, const MachineInstr &MI) + : Argument() { + Key = MKey; + + raw_string_ostream OS(Val); + MI.print(OS, /*SkipOpers=*/false, /*SkipDebugLoc=*/true); +} + Optional<uint64_t> MachineOptimizationRemarkEmitter::computeHotness(const MachineBasicBlock &MBB) { if (!MBFI) |

