diff options
Diffstat (limited to 'contrib/llvm-project/llvm/tools/llvm-mca/Views/View.h')
-rw-r--r-- | contrib/llvm-project/llvm/tools/llvm-mca/Views/View.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/tools/llvm-mca/Views/View.h b/contrib/llvm-project/llvm/tools/llvm-mca/Views/View.h index 3b52511b4d29..85464bfda662 100644 --- a/contrib/llvm-project/llvm/tools/llvm-mca/Views/View.h +++ b/contrib/llvm-project/llvm/tools/llvm-mca/Views/View.h @@ -15,16 +15,34 @@ #ifndef LLVM_TOOLS_LLVM_MCA_VIEW_H #define LLVM_TOOLS_LLVM_MCA_VIEW_H +#include "llvm/MC/MCInstPrinter.h" #include "llvm/MCA/HWEventListener.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/JSON.h" namespace llvm { namespace mca { class View : public HWEventListener { public: + enum OutputKind { OK_READABLE, OK_JSON }; + + void printView(OutputKind OutputKind, llvm::raw_ostream &OS) { + if (OutputKind == OK_JSON) + printViewJSON(OS); + else + printView(OS); + } + virtual void printView(llvm::raw_ostream &OS) const = 0; + virtual void printViewJSON(llvm::raw_ostream &OS) { + json::Object JO; + JO.try_emplace(getNameAsString().str(), toJSON()); + OS << formatv("{0:2}", json::Value(std::move(JO))) << "\n"; + } virtual ~View() = default; + virtual StringRef getNameAsString() const = 0; + virtual json::Value toJSON() const { return "not implemented"; } void anchor() override; }; } // namespace mca |