417 // basic blocks; i.e. _node_to_block_mapping now maps _idx for all Nodes to some Block. |
417 // basic blocks; i.e. _node_to_block_mapping now maps _idx for all Nodes to some Block. |
418 // Move nodes to ensure correctness from GVN and also try to move nodes out of loops. |
418 // Move nodes to ensure correctness from GVN and also try to move nodes out of loops. |
419 void global_code_motion(); |
419 void global_code_motion(); |
420 |
420 |
421 // Schedule Nodes early in their basic blocks. |
421 // Schedule Nodes early in their basic blocks. |
422 bool schedule_early(VectorSet &visited, Node_List &roots); |
422 bool schedule_early(VectorSet &visited, Node_Stack &roots); |
423 |
423 |
424 // For each node, find the latest block it can be scheduled into |
424 // For each node, find the latest block it can be scheduled into |
425 // and then select the cheapest block between the latest and earliest |
425 // and then select the cheapest block between the latest and earliest |
426 // block to place the node. |
426 // block to place the node. |
427 void schedule_late(VectorSet &visited, Node_List &stack); |
427 void schedule_late(VectorSet &visited, Node_Stack &stack); |
428 |
428 |
429 // Compute the (backwards) latency of a node from a single use |
429 // Compute the (backwards) latency of a node from a single use |
430 int latency_from_use(Node *n, const Node *def, Node *use); |
430 int latency_from_use(Node *n, const Node *def, Node *use); |
431 |
431 |
432 // Compute the (backwards) latency of a node from the uses of this instruction |
432 // Compute the (backwards) latency of a node from the uses of this instruction |
433 void partial_latency_of_defs(Node *n); |
433 void partial_latency_of_defs(Node *n); |
434 |
434 |
435 // Compute the instruction global latency with a backwards walk |
435 // Compute the instruction global latency with a backwards walk |
436 void compute_latencies_backwards(VectorSet &visited, Node_List &stack); |
436 void compute_latencies_backwards(VectorSet &visited, Node_Stack &stack); |
437 |
437 |
438 // Pick a block between early and late that is a cheaper alternative |
438 // Pick a block between early and late that is a cheaper alternative |
439 // to late. Helper for schedule_late. |
439 // to late. Helper for schedule_late. |
440 Block* hoist_to_cheaper_block(Block* LCA, Block* early, Node* self); |
440 Block* hoist_to_cheaper_block(Block* LCA, Block* early, Node* self); |
441 |
441 |