< prev index next >

src/share/vm/opto/superword.hpp

Print this page

        

*** 247,256 **** --- 247,257 ---- private: IdealLoopTree* _lpt; // Current loop tree node LoopNode* _lp; // Current LoopNode Node* _bb; // Current basic block PhiNode* _iv; // Induction var + bool _race_possible; // In cases where SDMU is true // Accessors Arena* arena() { return _arena; } Node* bb() { return _bb; }
*** 293,303 **** // Ensure node_info contains element "i" void grow_node_info(int i) { if (i >= _node_info.length()) _node_info.at_put_grow(i, SWNodeInfo::initial); } // memory alignment for a node int alignment(Node* n) { return _node_info.adr_at(bb_idx(n))->_alignment; } ! void set_alignment(Node* n, int a) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_alignment = a; } // Max expression (DAG) depth from beginning of the block for each node int depth(Node* n) { return _node_info.adr_at(bb_idx(n))->_depth; } void set_depth(Node* n, int d) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_depth = d; } --- 294,304 ---- // Ensure node_info contains element "i" void grow_node_info(int i) { if (i >= _node_info.length()) _node_info.at_put_grow(i, SWNodeInfo::initial); } // memory alignment for a node int alignment(Node* n) { return _node_info.adr_at(bb_idx(n))->_alignment; } ! void set_alignment(Node* n, int a) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_alignment = a; n->set_attr(a); } // Max expression (DAG) depth from beginning of the block for each node int depth(Node* n) { return _node_info.adr_at(bb_idx(n))->_depth; } void set_depth(Node* n, int d) { int i = bb_idx(n); grow_node_info(i); _node_info.adr_at(i)->_depth = d; }
*** 335,354 **** --- 336,359 ---- bool are_adjacent_refs(Node* s1, Node* s2); // Are s1 and s2 similar? bool isomorphic(Node* s1, Node* s2); // Is there no data path from s1 to s2 or s2 to s1? bool independent(Node* s1, Node* s2); + // Is there a data path between s1 and s2 and both are reductions? + bool reduction(Node* s1, Node* s2); // Helper for independent bool independent_path(Node* shallow, Node* deep, uint dp=0); void set_alignment(Node* s1, Node* s2, int align); int data_size(Node* s); // Extend packset by following use->def and def->use links from pack members. void extend_packlist(); // Extend the packset by visiting operand definitions of nodes in pack p bool follow_use_defs(Node_List* p); // Extend the packset by visiting uses of nodes in pack p bool follow_def_uses(Node_List* p); + // For extended packsets, ordinally arrange uses packset by major component + void order_def_uses(Node_List* p); // Estimate the savings from executing s1 and s2 as a pack int est_savings(Node* s1, Node* s2); int adjacent_profit(Node* s1, Node* s2); int pack_cost(int ct); int unpack_cost(int ct);
*** 377,386 **** --- 382,392 ---- // If a use of pack p is not a vector use, then replace the use with an extract operation. void insert_extracts(Node_List* p); // Is use->in(u_idx) a vector use? bool is_vector_use(Node* use, int u_idx); // Construct reverse postorder list of block members + bool is_reduction(Node* n); bool construct_bb(); // Initialize per node info void initialize_bb(); // Insert n into block after pos void bb_insert_after(Node* n, int pos);
*** 417,429 **** --- 423,438 ---- void print_packset(); void print_pack(Node_List* p); void print_bb(); void print_stmt(Node* s); char* blank(uint depth); + + static int packset_eval(Node_List** x, Node_List** y); }; + //------------------------------SWPointer--------------------------- // Information about an address for dependence checking and vector alignment class SWPointer VALUE_OBJ_CLASS_SPEC { protected: MemNode* _mem; // My memory reference node
< prev index next >