hotspot/src/share/vm/opto/idealGraphPrinter.hpp
Print this page
rev 611 : Merge
*** 1,8 ****
- #ifdef USE_PRAGMA_IDENT_HDR
- #pragma ident "@(#)idealGraphPrinter.hpp 1.1 07/09/28 11:48:37 JVM"
- #endif
/*
* Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
--- 1,5 ----
*** 83,319 ****
static const char *BYTECODES_ELEMENT;
static const char *METHOD_BCI_PROPERTY;
static const char *METHOD_SHORT_NAME_PROPERTY;
static const char *ASSEMBLY_ELEMENT;
! class Property {
!
! private:
!
! const char *_name;
! const char *_value;
!
! public:
!
! Property();
! Property(const Property* p);
! ~Property();
! Property(const char *name, const char *value);
! Property(const char *name, int value);
! bool equals(Property* p);
! void print(IdealGraphPrinter *printer);
! void print_as_attribute(IdealGraphPrinter *printer);
! bool is_null();
! void clean();
! const char *name();
!
! static const char* dup(const char *str) {
! char * copy = new char[strlen(str)+1];
! strcpy(copy, str);
! return copy;
! }
!
! };
!
! class Properties {
!
! private:
!
! GrowableArray<Property *> *list;
!
! public:
!
! Properties();
! ~Properties();
! void add(Property *p);
! void remove(const char *name);
! bool equals(Properties* p);
! void print(IdealGraphPrinter *printer);
! void print_as_attributes(IdealGraphPrinter *printer);
! void clean();
!
! };
!
!
! class Description {
!
! private:
!
! State _state;
!
! public:
!
! Description();
!
! State state();
! void set_state(State s);
! void print(IdealGraphPrinter *printer);
! virtual void print_changed(IdealGraphPrinter *printer) = 0;
! virtual void print_removed(IdealGraphPrinter *printer) = 0;
!
! };
!
! class NodeDescription : public Description{
!
! public:
!
! static int count;
!
! private:
!
! GrowableArray<NodeDescription *> _succs;
! int _block_index;
! uintptr_t _id;
! Properties _properties;
! Node* _node;
!
! public:
!
! NodeDescription(Node* node);
! ~NodeDescription();
! Node* node();
!
! // void set_node(Node* node);
! GrowableArray<NodeDescription *>* succs();
! void init_succs();
! void clear_succs();
! void add_succ(NodeDescription *desc);
! int block_index();
! void set_block_index(int i);
! Properties* properties();
! virtual void print_changed(IdealGraphPrinter *printer);
! virtual void print_removed(IdealGraphPrinter *printer);
! bool equals(NodeDescription *desc);
! uint id();
!
! };
!
! class Block {
!
! private:
!
! NodeDescription *_start;
! NodeDescription *_proj;
! GrowableArray<int> _succs;
! GrowableArray<NodeDescription *> _nodes;
! GrowableArray<int> _dominates;
! GrowableArray<int> _children;
! int _semi;
! int _parent;
! GrowableArray<int> _pred;
! GrowableArray<int> _bucket;
! int _index;
! int _dominator;
! int _ancestor;
! int _label;
!
! public:
!
! Block();
! Block(int index);
!
! void add_node(NodeDescription *n);
! GrowableArray<NodeDescription *>* nodes();
! GrowableArray<int>* children();
! void add_child(int i);
! void add_succ(int index);
! GrowableArray<int>* succs();
! GrowableArray<int>* dominates();
! void add_dominates(int i);
! NodeDescription *start();
! NodeDescription *proj();
! void set_start(NodeDescription *n);
! void set_proj(NodeDescription *n);
!
! int label();
! void set_label(int i);
! int ancestor();
! void set_ancestor(int i);
! int index();
! int dominator();
! void set_dominator(int i);
! int parent();
! void set_parent(int i);
! int semi();
! GrowableArray<int>* bucket();
! void add_to_bucket(int i);
! void clear_bucket();
! GrowableArray<int>* pred();
! void set_semi(int i);
! void add_pred(int i);
!
! };
!
! class EdgeDescription : public Description {
!
! private:
!
! int _from;
! int _to;
! int _index;
! public:
!
! EdgeDescription(int from, int to, int index);
! ~EdgeDescription();
!
! virtual void print_changed(IdealGraphPrinter *printer);
! virtual void print_removed(IdealGraphPrinter *printer);
! bool equals(EdgeDescription *desc);
! int from();
! int to();
! };
!
static int _file_count;
networkStream *_stream;
outputStream *_output;
ciMethod *_current_method;
- GrowableArray<NodeDescription *> _nodes;
- GrowableArray<EdgeDescription *> _edges;
int _depth;
- Arena *_arena;
char buffer[128];
bool _should_send_method;
PhaseChaitin* _chaitin;
- bool _clear_nodes;
- Matcher* _matcher;
bool _traverse_outs;
!
! void start_element_helper(const char *name, Properties *properties, bool endElement, bool print_indent = false, bool print_return = true);
! NodeDescription *create_node_description(Node* node);
static void pre_node(Node* node, void *env);
static void post_node(Node* node, void *env);
- void schedule_latest(int **common_dominator, GrowableArray<Block>* blocks);
- void build_common_dominator(int **common_dominator, int index, GrowableArray<Block>* blocks);
- void compress(int index, GrowableArray<Block>* blocks);
- int eval(int index, GrowableArray<Block>* blocks);
- void link(int index1, int index2, GrowableArray<Block>* blocks);
- void build_dominators(GrowableArray<Block>* blocks);
- void build_blocks(Node *node);
- void walk(Node *n);
- void start_element(const char *name, Properties *properties = NULL, bool print_indent = false, bool print_return = true);
- void simple_element(const char *name, Properties *properties = NULL, bool print_indent = false);
- void end_element(const char *name, bool print_indent = false, bool print_return = true);
- void print_edge(int from, int to, int index);
void print_indent();
void print_method(ciMethod *method, int bci, InlineTree *tree);
void print_inline_tree(InlineTree *tree);
! void clear_nodes();
!
IdealGraphPrinter();
~IdealGraphPrinter();
public:
static void clean_up();
static IdealGraphPrinter *printer();
bool traverse_outs();
void set_traverse_outs(bool b);
- void print_ifg(PhaseIFG* ifg);
outputStream *output();
void print_inlining(Compile* compile);
void begin_method(Compile* compile);
void end_method();
void print_method(Compile* compile, const char *name, int level=1, bool clear_nodes = false);
--- 80,135 ----
static const char *BYTECODES_ELEMENT;
static const char *METHOD_BCI_PROPERTY;
static const char *METHOD_SHORT_NAME_PROPERTY;
static const char *ASSEMBLY_ELEMENT;
! elapsedTimer _walk_time;
! elapsedTimer _output_time;
! elapsedTimer _build_blocks_time;
static int _file_count;
networkStream *_stream;
+ xmlStream *_xml;
outputStream *_output;
ciMethod *_current_method;
int _depth;
char buffer[128];
bool _should_send_method;
PhaseChaitin* _chaitin;
bool _traverse_outs;
! Compile *C;
static void pre_node(Node* node, void *env);
static void post_node(Node* node, void *env);
void print_indent();
void print_method(ciMethod *method, int bci, InlineTree *tree);
void print_inline_tree(InlineTree *tree);
! void visit_node(Node *n, void *param);
! void walk_nodes(Node *start, void *param);
! void begin_elem(const char *s);
! void end_elem();
! void begin_head(const char *s);
! void end_head();
! void print_attr(const char *name, const char *val);
! void print_attr(const char *name, intptr_t val);
! void print_prop(const char *name, const char *val);
! void print_prop(const char *name, int val);
! void tail(const char *name);
! void head(const char *name);
! void text(const char *s);
! intptr_t get_node_id(Node *n);
IdealGraphPrinter();
~IdealGraphPrinter();
public:
static void clean_up();
static IdealGraphPrinter *printer();
bool traverse_outs();
void set_traverse_outs(bool b);
outputStream *output();
void print_inlining(Compile* compile);
void begin_method(Compile* compile);
void end_method();
void print_method(Compile* compile, const char *name, int level=1, bool clear_nodes = false);