summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2017-02-23 21:05:33 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2017-02-23 21:05:33 +0000
commit272739751d87cb9438762b780a9f52e241d16553 (patch)
tree5a134cde6dfbc0a3d9dd0b8720f545d415fc9861
parent97119d48db056cd446e44cbf4561f695b4e54fb3 (diff)
downloadbcm5719-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.h12
-rw-r--r--llvm/lib/CodeGen/MachineOptimizationRemarkEmitter.cpp10
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)
OpenPOWER on IntegriCloud