Lines Matching refs:loop

40   hwloop_info loop;  in dump_hwloops()  local
42 for (loop = loops; loop; loop = loop->next) in dump_hwloops()
48 fprintf (dump_file, ";; loop %d: ", loop->loop_no); in dump_hwloops()
49 if (loop->bad) in dump_hwloops()
52 loop->head == NULL ? -1 : loop->head->index, in dump_hwloops()
53 loop->depth, REGNO (loop->iter_reg)); in dump_hwloops()
56 for (ix = 0; loop->blocks.iterate (ix, &b); ix++) in dump_hwloops()
61 for (ix = 0; loop->loops.iterate (ix, &i); ix++) in dump_hwloops()
70 bb_in_loop_p (hwloop_info loop, basic_block bb) in bb_in_loop_p() argument
72 return bitmap_bit_p (loop->block_bitmap, bb->index); in bb_in_loop_p()
78 scan_loop (hwloop_info loop) in scan_loop() argument
83 if (loop->bad) in scan_loop()
86 if (REGNO_REG_SET_P (df_get_live_in (loop->successor), in scan_loop()
87 REGNO (loop->iter_reg))) in scan_loop()
88 loop->iter_reg_used_outside = true; in scan_loop()
90 for (ix = 0; loop->blocks.iterate (ix, &bb); ix++) in scan_loop()
96 if (bb != loop->tail) in scan_loop()
99 if (bb_in_loop_p (loop, e->dest)) in scan_loop()
102 loop->jumps_within = true; in scan_loop()
106 loop->jumps_outof = true; in scan_loop()
107 if (!loop->bad) in scan_loop()
109 REGNO (loop->iter_reg))); in scan_loop()
126 loop->has_asm = true; in scan_loop()
140 if (insn == loop->loop_end) in scan_loop()
141 CLEAR_HARD_REG_BIT (set_this_insn, REGNO (loop->iter_reg)); in scan_loop()
142 else if (reg_mentioned_p (loop->iter_reg, PATTERN (insn))) in scan_loop()
143 loop->iter_reg_used = true; in scan_loop()
144 loop->regs_set_in_loop |= set_this_insn; in scan_loop()
158 process_incoming_edges (hwloop_info loop) in process_incoming_edges() argument
164 FOR_EACH_EDGE (e, ei, loop->incoming) in process_incoming_edges()
168 loop->incoming_src = e->src; in process_incoming_edges()
169 loop->incoming_dest = e->dest; in process_incoming_edges()
174 if (e->dest != loop->incoming_dest) in process_incoming_edges()
175 loop->incoming_dest = NULL; in process_incoming_edges()
176 if (e->src != loop->incoming_src) in process_incoming_edges()
177 loop->incoming_src = NULL; in process_incoming_edges()
180 if (loop->incoming_src == NULL && loop->incoming_dest == NULL) in process_incoming_edges()
193 add_forwarder_blocks (hwloop_info loop) in add_forwarder_blocks() argument
198 FOR_EACH_EDGE (e, ei, loop->incoming) in add_forwarder_blocks()
208 e->src->index, loop->loop_no); in add_forwarder_blocks()
209 loop->blocks.safe_push (e->src); in add_forwarder_blocks()
210 bitmap_set_bit (loop->block_bitmap, e->src->index); in add_forwarder_blocks()
212 vec_safe_push (loop->incoming, e2); in add_forwarder_blocks()
213 loop->incoming->unordered_remove (ei.index); in add_forwarder_blocks()
230 discover_loop (hwloop_info loop, basic_block tail_bb, rtx_insn *tail_insn, rtx reg) in discover_loop() argument
236 loop->tail = tail_bb; in discover_loop()
237 loop->loop_end = tail_insn; in discover_loop()
238 loop->iter_reg = reg; in discover_loop()
239 vec_alloc (loop->incoming, 2); in discover_loop()
240 loop->start_label = as_a <rtx_insn *> (JUMP_LABEL (tail_insn)); in discover_loop()
244 loop->bad = true; in discover_loop()
247 loop->head = BRANCH_EDGE (tail_bb)->dest; in discover_loop()
248 loop->successor = FALLTHRU_EDGE (tail_bb)->dest; in discover_loop()
251 works.safe_push (loop->head); in discover_loop()
264 loop->bad = true; in discover_loop()
268 if (bitmap_bit_p (loop->block_bitmap, bb->index)) in discover_loop()
274 loop->blocks.safe_push (bb); in discover_loop()
275 bitmap_set_bit (loop->block_bitmap, bb->index); in discover_loop()
285 REGNO (loop->iter_reg))) in discover_loop()
292 loop->bad = true; in discover_loop()
295 if (!loop->bad) in discover_loop()
297 FOR_EACH_VEC_ELT (loop->blocks, dwork, bb) in discover_loop()
305 if (!bb_in_loop_p (loop, pred)) in discover_loop()
309 loop->loop_no, pred->index, in discover_loop()
311 vec_safe_push (loop->incoming, e); in discover_loop()
316 if (!process_incoming_edges (loop)) in discover_loop()
321 loop->loop_no); in discover_loop()
322 if (!add_forwarder_blocks (loop)) in discover_loop()
326 loop->bad = true; in discover_loop()
328 else if (!process_incoming_edges (loop)) in discover_loop()
333 loop->loop_no); in discover_loop()
348 hwloop_info loop; in discover_loops() local
397 loop = XCNEW (struct hwloop_info_d); in discover_loops()
398 loop->next = loops; in discover_loops()
399 loops = loop; in discover_loops()
400 loop->loop_no = nloops++; in discover_loops()
401 loop->blocks.create (20); in discover_loops()
402 loop->block_bitmap = BITMAP_ALLOC (loop_stack); in discover_loops()
407 loop->loop_no); in discover_loops()
411 discover_loop (loop, bb, tail, reg); in discover_loops()
417 for (loop = loops; loop; loop = loop->next) in discover_loops()
421 if (loop->bad) in discover_loops()
429 if (!bitmap_intersect_p (other->block_bitmap, loop->block_bitmap)) in discover_loops()
432 loop->block_bitmap)) in discover_loops()
433 loop->loops.safe_push (other); in discover_loops()
434 else if (!bitmap_intersect_compl_p (loop->block_bitmap, in discover_loops()
436 other->loops.safe_push (loop); in discover_loops()
442 loop->loop_no, other->loop_no); in discover_loops()
443 loop->bad = other->bad = true; in discover_loops()
460 hwloop_info loop = loops; in free_loops() local
461 loops = loop->next; in free_loops()
462 loop->loops.release (); in free_loops()
463 loop->blocks.release (); in free_loops()
464 BITMAP_FREE (loop->block_bitmap); in free_loops()
465 XDELETE (loop); in free_loops()
494 hwloop_info loop; in reorder_loops() local
500 for (loop = loops; loop; loop = loop->next) in reorder_loops()
505 if (loop->bad) in reorder_loops()
508 if (BB_AUX_INDEX (loop->head) <= BB_AUX_INDEX (loop->tail)) in reorder_loops()
511 FOR_EACH_EDGE (e, ei, loop->head->succs) in reorder_loops()
513 if (bitmap_bit_p (loop->block_bitmap, e->dest->index) in reorder_loops()
514 && BB_AUX_INDEX (e->dest) < BB_AUX_INDEX (loop->tail)) in reorder_loops()
521 loop->head->index, start_bb->index); in reorder_loops()
522 loop->head->prev_bb->next_bb = loop->head->next_bb; in reorder_loops()
523 loop->head->next_bb->prev_bb = loop->head->prev_bb; in reorder_loops()
525 loop->head->prev_bb = start_prev_bb; in reorder_loops()
526 loop->head->next_bb = start_bb; in reorder_loops()
527 start_prev_bb->next_bb = start_bb->prev_bb = loop->head; in reorder_loops()
553 optimize_loop (hwloop_info loop, struct hw_doloop_hooks *hooks) in optimize_loop() argument
559 if (loop->visited) in optimize_loop()
562 loop->visited = 1; in optimize_loop()
564 if (loop->bad) in optimize_loop()
567 fprintf (dump_file, ";; loop %d bad when found\n", loop->loop_no); in optimize_loop()
576 for (ix = 0; loop->loops.iterate (ix, &inner); ix++) in optimize_loop()
584 loop->regs_set_in_loop |= inner->regs_set_in_loop; in optimize_loop()
587 loop->depth = inner_depth + 1; in optimize_loop()
589 if (hooks->opt (loop)) in optimize_loop()
594 fprintf (dump_file, ";; loop %d is bad\n", loop->loop_no); in optimize_loop()
596 loop->bad = true; in optimize_loop()
597 hooks->fail (loop); in optimize_loop()
621 hwloop_info loop; in reorg_loops() local
648 for (loop = loops; loop; loop = loop->next) in reorg_loops()
649 scan_loop (loop); in reorg_loops()
652 for (loop = loops; loop; loop = loop->next) in reorg_loops()
653 optimize_loop (loop, hooks); in reorg_loops()