diff options
author | Vladimir Marko <vmarko@google.com> | 2021-01-05 16:57:30 +0000 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2021-01-06 15:06:24 +0000 |
commit | c9fcfd02a69170cedcd4cf2e66826f246dff6267 (patch) | |
tree | 2bc39091ec4dbc71bad37efafde41d13d168f0ca /compiler/optimizing/graph_visualizer.h | |
parent | 782fb716122d37dc4c4d7482afb21f6e68be04b4 (diff) |
Optimizing: Add debugging output for HInstruction.
Allow printing individual instruction and its arguments with
the HGraphVisualizer. Arguments are dumped "recursively"
(but implemented with a queue instead of actual recursion).
For example, printing the Return instruction from the method
Main.testLoop17 in 530-checker-lse yields
v28 Return [i27] dex_pc:23 loop:none
i27 Add [i24,i26] dex_pc:22 loop:none
i24 Phi [i5,i15] dex_pc:n/a reg:0 is_catch_phi:false loop:none
i5 IntConstant dex_pc:0 1 loop:none
i15 IntConstant dex_pc:5 2 loop:none
i26 InstanceFieldGet [l6] dex_pc:20 field_name:TestClass.i field_type:Int32 loop:none
l6 NullCheck [l1] dex_pc:1 env:[[i5,_,_,l1,i2]] loop:none
l1 ParameterValue dex_pc:n/a loop:none
Test: Manual; modify LSE to print the instruction above.
Change-Id: Iaf41ba62cd6a5a36236ad0abca082ebffcf6a20e
Diffstat (limited to 'compiler/optimizing/graph_visualizer.h')
-rw-r--r-- | compiler/optimizing/graph_visualizer.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/optimizing/graph_visualizer.h b/compiler/optimizing/graph_visualizer.h index e01d03c19c..b83e88740c 100644 --- a/compiler/optimizing/graph_visualizer.h +++ b/compiler/optimizing/graph_visualizer.h @@ -101,7 +101,7 @@ class HGraphVisualizer : public ValueObject { public: HGraphVisualizer(std::ostream* output, HGraph* graph, - const CodeGenerator& codegen); + const CodeGenerator* codegen); void PrintHeader(const char* method_name) const; void DumpGraph(const char* pass_name, bool is_after_pass, bool graph_in_bad_state) const; @@ -112,10 +112,12 @@ 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: std::ostream* const output_; HGraph* const graph_; - const CodeGenerator& codegen_; + const CodeGenerator* codegen_; DISALLOW_COPY_AND_ASSIGN(HGraphVisualizer); }; |