summaryrefslogtreecommitdiff
path: root/compiler/optimizing/graph_visualizer.h
diff options
context:
space:
mode:
authorAndroid Build Role Account android-build-prod <android-build-team-robot@google.com>2021-02-06 00:20:35 +0000
committerAndroid Build Role Account android-build-prod <android-build-team-robot@google.com>2021-02-06 00:20:35 +0000
commitb944d4abd5852df000a22a8a57aa5637eb4441c2 (patch)
treee88119c8bebd70e06df7eeebe62e81760848d224 /compiler/optimizing/graph_visualizer.h
parentff3e2f60facfed9909d58ce4ac9f5c01849de5d8 (diff)
parent2ca15e8c3e0f3e7356d7a6d9a87a61659342f867 (diff)
Snap for 7127838 from 2ca15e8c3e0f3e7356d7a6d9a87a61659342f867 to s-keystone-qcom-release
Change-Id: I42a1aad917b6b625dd024ec307842ed71df50284
Diffstat (limited to 'compiler/optimizing/graph_visualizer.h')
-rw-r--r--compiler/optimizing/graph_visualizer.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/compiler/optimizing/graph_visualizer.h b/compiler/optimizing/graph_visualizer.h
index e01d03c19c..3429c11cbd 100644
--- a/compiler/optimizing/graph_visualizer.h
+++ b/compiler/optimizing/graph_visualizer.h
@@ -17,11 +17,13 @@
#ifndef ART_COMPILER_OPTIMIZING_GRAPH_VISUALIZER_H_
#define ART_COMPILER_OPTIMIZING_GRAPH_VISUALIZER_H_
+#include <functional>
#include <ostream>
#include "arch/instruction_set.h"
#include "base/arena_containers.h"
#include "base/value_object.h"
+#include "block_namer.h"
namespace art {
@@ -101,10 +103,12 @@ class HGraphVisualizer : public ValueObject {
public:
HGraphVisualizer(std::ostream* output,
HGraph* graph,
- const CodeGenerator& codegen);
+ const CodeGenerator* codegen,
+ std::optional<std::reference_wrapper<const BlockNamer>> namer = std::nullopt);
void PrintHeader(const char* method_name) const;
void DumpGraph(const char* pass_name, bool is_after_pass, bool graph_in_bad_state) const;
+ void DumpGraphDebug() const;
void DumpGraphWithDisassembly() const;
// C1visualizer file format does not support inserting arbitrary metadata into a cfg
@@ -112,10 +116,24 @@ class HGraphVisualizer : public ValueObject {
// method attributes is used. Such empty blocks don't break the c1visualizer parser.
static std::string InsertMetaDataAsCompilationBlock(const std::string& meta_data);
+ static void DumpInstruction(std::ostream* output, HGraph* graph, HInstruction* instruction);
+
private:
+ class OptionalDefaultNamer final : public BlockNamer {
+ public:
+ explicit OptionalDefaultNamer(std::optional<std::reference_wrapper<const BlockNamer>> inner)
+ : namer_(inner) {}
+
+ std::ostream& PrintName(std::ostream& os, HBasicBlock* blk) const override;
+
+ private:
+ std::optional<std::reference_wrapper<const BlockNamer>> namer_;
+ };
+
std::ostream* const output_;
HGraph* const graph_;
- const CodeGenerator& codegen_;
+ const CodeGenerator* codegen_;
+ OptionalDefaultNamer namer_;
DISALLOW_COPY_AND_ASSIGN(HGraphVisualizer);
};