343 int adjacent_profit(Node* s1, Node* s2);
344 int pack_cost(int ct);
345 int unpack_cost(int ct);
346 // Combine packs A and B with A.last == B.first into A.first..,A.last,B.second,..B.last
347 void combine_packs();
348 // Construct the map from nodes to packs.
349 void construct_my_pack_map();
350 // Remove packs that are not implemented or not profitable.
351 void filter_packs();
352 // Adjust the memory graph for the packed operations
353 void schedule();
354 // Remove "current" from its current position in the memory graph and insert
355 // it after the appropriate insert points (lip or uip);
356 void remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, Node *uip, Unique_Node_List &schd_before);
357 // Within a store pack, schedule stores together by moving out the sandwiched memory ops according
358 // to dependence info; and within a load pack, move loads down to the last executed load.
359 void co_locate_pack(Node_List* p);
360 // Convert packs into vector node operations
361 void output();
362 // Create a vector operand for the nodes in pack p for operand: in(opd_idx)
363 VectorNode* vector_opd(Node_List* p, int opd_idx);
364 // Can code be generated for pack p?
365 bool implemented(Node_List* p);
366 // For pack p, are all operands and all uses (with in the block) vector?
367 bool profitable(Node_List* p);
368 // If a use of pack p is not a vector use, then replace the use with an extract operation.
369 void insert_extracts(Node_List* p);
370 // Is use->in(u_idx) a vector use?
371 bool is_vector_use(Node* use, int u_idx);
372 // Construct reverse postorder list of block members
373 void construct_bb();
374 // Initialize per node info
375 void initialize_bb();
376 // Insert n into block after pos
377 void bb_insert_after(Node* n, int pos);
378 // Compute max depth for expressions from beginning of block
379 void compute_max_depth();
380 // Compute necessary vector element type for expressions
381 void compute_vector_element_type();
382 // Are s1 and s2 in a pack pair and ordered as s1,s2?
383 bool in_packset(Node* s1, Node* s2);
|
343 int adjacent_profit(Node* s1, Node* s2);
344 int pack_cost(int ct);
345 int unpack_cost(int ct);
346 // Combine packs A and B with A.last == B.first into A.first..,A.last,B.second,..B.last
347 void combine_packs();
348 // Construct the map from nodes to packs.
349 void construct_my_pack_map();
350 // Remove packs that are not implemented or not profitable.
351 void filter_packs();
352 // Adjust the memory graph for the packed operations
353 void schedule();
354 // Remove "current" from its current position in the memory graph and insert
355 // it after the appropriate insert points (lip or uip);
356 void remove_and_insert(MemNode *current, MemNode *prev, MemNode *lip, Node *uip, Unique_Node_List &schd_before);
357 // Within a store pack, schedule stores together by moving out the sandwiched memory ops according
358 // to dependence info; and within a load pack, move loads down to the last executed load.
359 void co_locate_pack(Node_List* p);
360 // Convert packs into vector node operations
361 void output();
362 // Create a vector operand for the nodes in pack p for operand: in(opd_idx)
363 Node* vector_opd(Node_List* p, int opd_idx);
364 // Can code be generated for pack p?
365 bool implemented(Node_List* p);
366 // For pack p, are all operands and all uses (with in the block) vector?
367 bool profitable(Node_List* p);
368 // If a use of pack p is not a vector use, then replace the use with an extract operation.
369 void insert_extracts(Node_List* p);
370 // Is use->in(u_idx) a vector use?
371 bool is_vector_use(Node* use, int u_idx);
372 // Construct reverse postorder list of block members
373 void construct_bb();
374 // Initialize per node info
375 void initialize_bb();
376 // Insert n into block after pos
377 void bb_insert_after(Node* n, int pos);
378 // Compute max depth for expressions from beginning of block
379 void compute_max_depth();
380 // Compute necessary vector element type for expressions
381 void compute_vector_element_type();
382 // Are s1 and s2 in a pack pair and ordered as s1,s2?
383 bool in_packset(Node* s1, Node* s2);
|