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);