OSDN Git Service

2001-05-03 David O'Brien <obrien@FreeBSD.org>
[pf3gnuchains/gcc-fork.git] / gcc / unroll.c
1 /* Try to unroll loops, and split induction variables.
2    Copyright (C) 1992, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001
3    Free Software Foundation, Inc.
4    Contributed by James E. Wilson, Cygnus Support/UC Berkeley.
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23 /* Try to unroll a loop, and split induction variables.
24
25    Loops for which the number of iterations can be calculated exactly are
26    handled specially.  If the number of iterations times the insn_count is
27    less than MAX_UNROLLED_INSNS, then the loop is unrolled completely.
28    Otherwise, we try to unroll the loop a number of times modulo the number
29    of iterations, so that only one exit test will be needed.  It is unrolled
30    a number of times approximately equal to MAX_UNROLLED_INSNS divided by
31    the insn count.
32
33    Otherwise, if the number of iterations can be calculated exactly at
34    run time, and the loop is always entered at the top, then we try to
35    precondition the loop.  That is, at run time, calculate how many times
36    the loop will execute, and then execute the loop body a few times so
37    that the remaining iterations will be some multiple of 4 (or 2 if the
38    loop is large).  Then fall through to a loop unrolled 4 (or 2) times,
39    with only one exit test needed at the end of the loop.
40
41    Otherwise, if the number of iterations can not be calculated exactly,
42    not even at run time, then we still unroll the loop a number of times
43    approximately equal to MAX_UNROLLED_INSNS divided by the insn count,
44    but there must be an exit test after each copy of the loop body.
45
46    For each induction variable, which is dead outside the loop (replaceable)
47    or for which we can easily calculate the final value, if we can easily
48    calculate its value at each place where it is set as a function of the
49    current loop unroll count and the variable's value at loop entry, then
50    the induction variable is split into `N' different variables, one for
51    each copy of the loop body.  One variable is live across the backward
52    branch, and the others are all calculated as a function of this variable.
53    This helps eliminate data dependencies, and leads to further opportunities
54    for cse.  */
55
56 /* Possible improvements follow:  */
57
58 /* ??? Add an extra pass somewhere to determine whether unrolling will
59    give any benefit.  E.g. after generating all unrolled insns, compute the
60    cost of all insns and compare against cost of insns in rolled loop.
61
62    - On traditional architectures, unrolling a non-constant bound loop
63      is a win if there is a giv whose only use is in memory addresses, the
64      memory addresses can be split, and hence giv increments can be
65      eliminated.
66    - It is also a win if the loop is executed many times, and preconditioning
67      can be performed for the loop.
68    Add code to check for these and similar cases.  */
69
70 /* ??? Improve control of which loops get unrolled.  Could use profiling
71    info to only unroll the most commonly executed loops.  Perhaps have
72    a user specifyable option to control the amount of code expansion,
73    or the percent of loops to consider for unrolling.  Etc.  */
74
75 /* ??? Look at the register copies inside the loop to see if they form a
76    simple permutation.  If so, iterate the permutation until it gets back to
77    the start state.  This is how many times we should unroll the loop, for
78    best results, because then all register copies can be eliminated.
79    For example, the lisp nreverse function should be unrolled 3 times
80    while (this)
81      {
82        next = this->cdr;
83        this->cdr = prev;
84        prev = this;
85        this = next;
86      }
87
88    ??? The number of times to unroll the loop may also be based on data
89    references in the loop.  For example, if we have a loop that references
90    x[i-1], x[i], and x[i+1], we should unroll it a multiple of 3 times.  */
91
92 /* ??? Add some simple linear equation solving capability so that we can
93    determine the number of loop iterations for more complex loops.
94    For example, consider this loop from gdb
95    #define SWAP_TARGET_AND_HOST(buffer,len)
96      {
97        char tmp;
98        char *p = (char *) buffer;
99        char *q = ((char *) buffer) + len - 1;
100        int iterations = (len + 1) >> 1;
101        int i;
102        for (p; p < q; p++, q--;)
103          {
104            tmp = *q;
105            *q = *p;
106            *p = tmp;
107          }
108      }
109    Note that:
110      start value = p = &buffer + current_iteration
111      end value   = q = &buffer + len - 1 - current_iteration
112    Given the loop exit test of "p < q", then there must be "q - p" iterations,
113    set equal to zero and solve for number of iterations:
114      q - p = len - 1 - 2*current_iteration = 0
115      current_iteration = (len - 1) / 2
116    Hence, there are (len - 1) / 2 (rounded up to the nearest integer)
117    iterations of this loop.  */
118
119 /* ??? Currently, no labels are marked as loop invariant when doing loop
120    unrolling.  This is because an insn inside the loop, that loads the address
121    of a label inside the loop into a register, could be moved outside the loop
122    by the invariant code motion pass if labels were invariant.  If the loop
123    is subsequently unrolled, the code will be wrong because each unrolled
124    body of the loop will use the same address, whereas each actually needs a
125    different address.  A case where this happens is when a loop containing
126    a switch statement is unrolled.
127
128    It would be better to let labels be considered invariant.  When we
129    unroll loops here, check to see if any insns using a label local to the
130    loop were moved before the loop.  If so, then correct the problem, by
131    moving the insn back into the loop, or perhaps replicate the insn before
132    the loop, one copy for each time the loop is unrolled.  */
133
134 /* The prime factors looked for when trying to unroll a loop by some
135    number which is modulo the total number of iterations.  Just checking
136    for these 4 prime factors will find at least one factor for 75% of
137    all numbers theoretically.  Practically speaking, this will succeed
138    almost all of the time since loops are generally a multiple of 2
139    and/or 5.  */
140
141 #define NUM_FACTORS 4
142
143 struct _factor { int factor, count; }
144 factors[NUM_FACTORS] = { {2, 0}, {3, 0}, {5, 0}, {7, 0}};
145
146 /* Describes the different types of loop unrolling performed.  */
147
148 enum unroll_types
149 {
150   UNROLL_COMPLETELY,
151   UNROLL_MODULO,
152   UNROLL_NAIVE
153 };
154
155 #include "config.h"
156 #include "system.h"
157 #include "rtl.h"
158 #include "tm_p.h"
159 #include "insn-config.h"
160 #include "integrate.h"
161 #include "regs.h"
162 #include "recog.h"
163 #include "flags.h"
164 #include "function.h"
165 #include "expr.h"
166 #include "loop.h"
167 #include "toplev.h"
168 #include "hard-reg-set.h"
169 #include "basic-block.h"
170
171 /* This controls which loops are unrolled, and by how much we unroll
172    them.  */
173
174 #ifndef MAX_UNROLLED_INSNS
175 #define MAX_UNROLLED_INSNS 100
176 #endif
177
178 /* Indexed by register number, if non-zero, then it contains a pointer
179    to a struct induction for a DEST_REG giv which has been combined with
180    one of more address givs.  This is needed because whenever such a DEST_REG
181    giv is modified, we must modify the value of all split address givs
182    that were combined with this DEST_REG giv.  */
183
184 static struct induction **addr_combined_regs;
185
186 /* Indexed by register number, if this is a splittable induction variable,
187    then this will hold the current value of the register, which depends on the
188    iteration number.  */
189
190 static rtx *splittable_regs;
191
192 /* Indexed by register number, if this is a splittable induction variable,
193    then this will hold the number of instructions in the loop that modify
194    the induction variable.  Used to ensure that only the last insn modifying
195    a split iv will update the original iv of the dest.  */
196
197 static int *splittable_regs_updates;
198
199 /* Forward declarations.  */
200
201 static void init_reg_map PARAMS ((struct inline_remap *, int));
202 static rtx calculate_giv_inc PARAMS ((rtx, rtx, unsigned int));
203 static rtx initial_reg_note_copy PARAMS ((rtx, struct inline_remap *));
204 static void final_reg_note_copy PARAMS ((rtx, struct inline_remap *));
205 static void copy_loop_body PARAMS ((struct loop *, rtx, rtx,
206                                     struct inline_remap *, rtx, int,
207                                     enum unroll_types, rtx, rtx, rtx, rtx));
208 static int find_splittable_regs PARAMS ((const struct loop *,
209                                          enum unroll_types, int));
210 static int find_splittable_givs PARAMS ((const struct loop *,
211                                          struct iv_class *, enum unroll_types,
212                                          rtx, int));
213 static int reg_dead_after_loop PARAMS ((const struct loop *, rtx));
214 static rtx fold_rtx_mult_add PARAMS ((rtx, rtx, rtx, enum machine_mode));
215 static int verify_addresses PARAMS ((struct induction *, rtx, int));
216 static rtx remap_split_bivs PARAMS ((struct loop *, rtx));
217 static rtx find_common_reg_term PARAMS ((rtx, rtx));
218 static rtx subtract_reg_term PARAMS ((rtx, rtx));
219 static rtx loop_find_equiv_value PARAMS ((const struct loop *, rtx));
220 static rtx ujump_to_loop_cont PARAMS ((rtx, rtx));
221
222 /* Try to unroll one loop and split induction variables in the loop.
223
224    The loop is described by the arguments LOOP and INSN_COUNT.
225    STRENGTH_REDUCTION_P indicates whether information generated in the
226    strength reduction pass is available.
227
228    This function is intended to be called from within `strength_reduce'
229    in loop.c.  */
230
231 void
232 unroll_loop (loop, insn_count, strength_reduce_p)
233      struct loop *loop;
234      int insn_count;
235      int strength_reduce_p;
236 {
237   struct loop_info *loop_info = LOOP_INFO (loop);
238   struct loop_ivs *ivs = LOOP_IVS (loop);
239   int i, j;
240   unsigned int r;
241   unsigned HOST_WIDE_INT temp;
242   int unroll_number = 1;
243   rtx copy_start, copy_end;
244   rtx insn, sequence, pattern, tem;
245   int max_labelno, max_insnno;
246   rtx insert_before;
247   struct inline_remap *map;
248   char *local_label = NULL;
249   char *local_regno;
250   unsigned int max_local_regnum;
251   unsigned int maxregnum;
252   rtx exit_label = 0;
253   rtx start_label;
254   struct iv_class *bl;
255   int splitting_not_safe = 0;
256   enum unroll_types unroll_type = UNROLL_NAIVE;
257   int loop_preconditioned = 0;
258   rtx safety_label;
259   /* This points to the last real insn in the loop, which should be either
260      a JUMP_INSN (for conditional jumps) or a BARRIER (for unconditional
261      jumps).  */
262   rtx last_loop_insn;
263   rtx loop_start = loop->start;
264   rtx loop_end = loop->end;
265
266   /* Don't bother unrolling huge loops.  Since the minimum factor is
267      two, loops greater than one half of MAX_UNROLLED_INSNS will never
268      be unrolled.  */
269   if (insn_count > MAX_UNROLLED_INSNS / 2)
270     {
271       if (loop_dump_stream)
272         fprintf (loop_dump_stream, "Unrolling failure: Loop too big.\n");
273       return;
274     }
275
276   /* When emitting debugger info, we can't unroll loops with unequal numbers
277      of block_beg and block_end notes, because that would unbalance the block
278      structure of the function.  This can happen as a result of the
279      "if (foo) bar; else break;" optimization in jump.c.  */
280   /* ??? Gcc has a general policy that -g is never supposed to change the code
281      that the compiler emits, so we must disable this optimization always,
282      even if debug info is not being output.  This is rare, so this should
283      not be a significant performance problem.  */
284
285   if (1 /* write_symbols != NO_DEBUG */)
286     {
287       int block_begins = 0;
288       int block_ends = 0;
289
290       for (insn = loop_start; insn != loop_end; insn = NEXT_INSN (insn))
291         {
292           if (GET_CODE (insn) == NOTE)
293             {
294               if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG)
295                 block_begins++;
296               else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END)
297                 block_ends++;
298               if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG
299                   || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END)
300                 {
301                   /* Note, would be nice to add code to unroll EH
302                      regions, but until that time, we punt (don't
303                      unroll).  For the proper way of doing it, see
304                      expand_inline_function.  */
305
306                   if (loop_dump_stream)
307                     fprintf (loop_dump_stream,
308                              "Unrolling failure: cannot unroll EH regions.\n");
309                   return;
310                 }
311             }
312         }
313
314       if (block_begins != block_ends)
315         {
316           if (loop_dump_stream)
317             fprintf (loop_dump_stream,
318                      "Unrolling failure: Unbalanced block notes.\n");
319           return;
320         }
321     }
322
323   /* Determine type of unroll to perform.  Depends on the number of iterations
324      and the size of the loop.  */
325
326   /* If there is no strength reduce info, then set
327      loop_info->n_iterations to zero.  This can happen if
328      strength_reduce can't find any bivs in the loop.  A value of zero
329      indicates that the number of iterations could not be calculated.  */
330
331   if (! strength_reduce_p)
332     loop_info->n_iterations = 0;
333
334   if (loop_dump_stream && loop_info->n_iterations > 0)
335     {
336       fputs ("Loop unrolling: ", loop_dump_stream);
337       fprintf (loop_dump_stream, HOST_WIDE_INT_PRINT_DEC,
338                loop_info->n_iterations);
339       fputs (" iterations.\n", loop_dump_stream);
340     }
341
342   /* Find and save a pointer to the last nonnote insn in the loop.  */
343
344   last_loop_insn = prev_nonnote_insn (loop_end);
345
346   /* Calculate how many times to unroll the loop.  Indicate whether or
347      not the loop is being completely unrolled.  */
348
349   if (loop_info->n_iterations == 1)
350     {
351       /* Handle the case where the loop begins with an unconditional
352          jump to the loop condition.  Make sure to delete the jump
353          insn, otherwise the loop body will never execute.  */
354
355       rtx ujump = ujump_to_loop_cont (loop->start, loop->cont);
356       if (ujump)
357         delete_insn (ujump);
358
359       /* If number of iterations is exactly 1, then eliminate the compare and
360          branch at the end of the loop since they will never be taken.
361          Then return, since no other action is needed here.  */
362
363       /* If the last instruction is not a BARRIER or a JUMP_INSN, then
364          don't do anything.  */
365
366       if (GET_CODE (last_loop_insn) == BARRIER)
367         {
368           /* Delete the jump insn.  This will delete the barrier also.  */
369           delete_insn (PREV_INSN (last_loop_insn));
370         }
371       else if (GET_CODE (last_loop_insn) == JUMP_INSN)
372         {
373 #ifdef HAVE_cc0
374           rtx prev = PREV_INSN (last_loop_insn);
375 #endif
376           delete_insn (last_loop_insn);
377 #ifdef HAVE_cc0
378           /* The immediately preceding insn may be a compare which must be
379              deleted.  */
380           if (sets_cc0_p (prev))
381             delete_insn (prev);
382 #endif
383         }
384
385       /* Remove the loop notes since this is no longer a loop.  */
386       if (loop->vtop)
387         delete_insn (loop->vtop);
388       if (loop->cont)
389         delete_insn (loop->cont);
390       if (loop_start)
391         delete_insn (loop_start);
392       if (loop_end)
393         delete_insn (loop_end);
394
395       return;
396     }
397   else if (loop_info->n_iterations > 0
398            /* Avoid overflow in the next expression.  */
399            && loop_info->n_iterations < MAX_UNROLLED_INSNS
400            && loop_info->n_iterations * insn_count < MAX_UNROLLED_INSNS)
401     {
402       unroll_number = loop_info->n_iterations;
403       unroll_type = UNROLL_COMPLETELY;
404     }
405   else if (loop_info->n_iterations > 0)
406     {
407       /* Try to factor the number of iterations.  Don't bother with the
408          general case, only using 2, 3, 5, and 7 will get 75% of all
409          numbers theoretically, and almost all in practice.  */
410
411       for (i = 0; i < NUM_FACTORS; i++)
412         factors[i].count = 0;
413
414       temp = loop_info->n_iterations;
415       for (i = NUM_FACTORS - 1; i >= 0; i--)
416         while (temp % factors[i].factor == 0)
417           {
418             factors[i].count++;
419             temp = temp / factors[i].factor;
420           }
421
422       /* Start with the larger factors first so that we generally
423          get lots of unrolling.  */
424
425       unroll_number = 1;
426       temp = insn_count;
427       for (i = 3; i >= 0; i--)
428         while (factors[i].count--)
429           {
430             if (temp * factors[i].factor < MAX_UNROLLED_INSNS)
431               {
432                 unroll_number *= factors[i].factor;
433                 temp *= factors[i].factor;
434               }
435             else
436               break;
437           }
438
439       /* If we couldn't find any factors, then unroll as in the normal
440          case.  */
441       if (unroll_number == 1)
442         {
443           if (loop_dump_stream)
444             fprintf (loop_dump_stream, "Loop unrolling: No factors found.\n");
445         }
446       else
447         unroll_type = UNROLL_MODULO;
448     }
449
450   /* Default case, calculate number of times to unroll loop based on its
451      size.  */
452   if (unroll_type == UNROLL_NAIVE)
453     {
454       if (8 * insn_count < MAX_UNROLLED_INSNS)
455         unroll_number = 8;
456       else if (4 * insn_count < MAX_UNROLLED_INSNS)
457         unroll_number = 4;
458       else
459         unroll_number = 2;
460     }
461
462   /* Now we know how many times to unroll the loop.  */
463
464   if (loop_dump_stream)
465     fprintf (loop_dump_stream, "Unrolling loop %d times.\n", unroll_number);
466
467   if (unroll_type == UNROLL_COMPLETELY || unroll_type == UNROLL_MODULO)
468     {
469       /* Loops of these types can start with jump down to the exit condition
470          in rare circumstances.
471
472          Consider a pair of nested loops where the inner loop is part
473          of the exit code for the outer loop.
474
475          In this case jump.c will not duplicate the exit test for the outer
476          loop, so it will start with a jump to the exit code.
477
478          Then consider if the inner loop turns out to iterate once and
479          only once.  We will end up deleting the jumps associated with
480          the inner loop.  However, the loop notes are not removed from
481          the instruction stream.
482
483          And finally assume that we can compute the number of iterations
484          for the outer loop.
485
486          In this case unroll may want to unroll the outer loop even though
487          it starts with a jump to the outer loop's exit code.
488
489          We could try to optimize this case, but it hardly seems worth it.
490          Just return without unrolling the loop in such cases.  */
491
492       insn = loop_start;
493       while (GET_CODE (insn) != CODE_LABEL && GET_CODE (insn) != JUMP_INSN)
494         insn = NEXT_INSN (insn);
495       if (GET_CODE (insn) == JUMP_INSN)
496         return;
497     }
498
499   if (unroll_type == UNROLL_COMPLETELY)
500     {
501       /* Completely unrolling the loop:  Delete the compare and branch at
502          the end (the last two instructions).   This delete must done at the
503          very end of loop unrolling, to avoid problems with calls to
504          back_branch_in_range_p, which is called by find_splittable_regs.
505          All increments of splittable bivs/givs are changed to load constant
506          instructions.  */
507
508       copy_start = loop_start;
509
510       /* Set insert_before to the instruction immediately after the JUMP_INSN
511          (or BARRIER), so that any NOTEs between the JUMP_INSN and the end of
512          the loop will be correctly handled by copy_loop_body.  */
513       insert_before = NEXT_INSN (last_loop_insn);
514
515       /* Set copy_end to the insn before the jump at the end of the loop.  */
516       if (GET_CODE (last_loop_insn) == BARRIER)
517         copy_end = PREV_INSN (PREV_INSN (last_loop_insn));
518       else if (GET_CODE (last_loop_insn) == JUMP_INSN)
519         {
520           copy_end = PREV_INSN (last_loop_insn);
521 #ifdef HAVE_cc0
522           /* The instruction immediately before the JUMP_INSN may be a compare
523              instruction which we do not want to copy.  */
524           if (sets_cc0_p (PREV_INSN (copy_end)))
525             copy_end = PREV_INSN (copy_end);
526 #endif
527         }
528       else
529         {
530           /* We currently can't unroll a loop if it doesn't end with a
531              JUMP_INSN.  There would need to be a mechanism that recognizes
532              this case, and then inserts a jump after each loop body, which
533              jumps to after the last loop body.  */
534           if (loop_dump_stream)
535             fprintf (loop_dump_stream,
536                      "Unrolling failure: loop does not end with a JUMP_INSN.\n");
537           return;
538         }
539     }
540   else if (unroll_type == UNROLL_MODULO)
541     {
542       /* Partially unrolling the loop:  The compare and branch at the end
543          (the last two instructions) must remain.  Don't copy the compare
544          and branch instructions at the end of the loop.  Insert the unrolled
545          code immediately before the compare/branch at the end so that the
546          code will fall through to them as before.  */
547
548       copy_start = loop_start;
549
550       /* Set insert_before to the jump insn at the end of the loop.
551          Set copy_end to before the jump insn at the end of the loop.  */
552       if (GET_CODE (last_loop_insn) == BARRIER)
553         {
554           insert_before = PREV_INSN (last_loop_insn);
555           copy_end = PREV_INSN (insert_before);
556         }
557       else if (GET_CODE (last_loop_insn) == JUMP_INSN)
558         {
559           insert_before = last_loop_insn;
560 #ifdef HAVE_cc0
561           /* The instruction immediately before the JUMP_INSN may be a compare
562              instruction which we do not want to copy or delete.  */
563           if (sets_cc0_p (PREV_INSN (insert_before)))
564             insert_before = PREV_INSN (insert_before);
565 #endif
566           copy_end = PREV_INSN (insert_before);
567         }
568       else
569         {
570           /* We currently can't unroll a loop if it doesn't end with a
571              JUMP_INSN.  There would need to be a mechanism that recognizes
572              this case, and then inserts a jump after each loop body, which
573              jumps to after the last loop body.  */
574           if (loop_dump_stream)
575             fprintf (loop_dump_stream,
576                      "Unrolling failure: loop does not end with a JUMP_INSN.\n");
577           return;
578         }
579     }
580   else
581     {
582       /* Normal case: Must copy the compare and branch instructions at the
583          end of the loop.  */
584
585       if (GET_CODE (last_loop_insn) == BARRIER)
586         {
587           /* Loop ends with an unconditional jump and a barrier.
588              Handle this like above, don't copy jump and barrier.
589              This is not strictly necessary, but doing so prevents generating
590              unconditional jumps to an immediately following label.
591
592              This will be corrected below if the target of this jump is
593              not the start_label.  */
594
595           insert_before = PREV_INSN (last_loop_insn);
596           copy_end = PREV_INSN (insert_before);
597         }
598       else if (GET_CODE (last_loop_insn) == JUMP_INSN)
599         {
600           /* Set insert_before to immediately after the JUMP_INSN, so that
601              NOTEs at the end of the loop will be correctly handled by
602              copy_loop_body.  */
603           insert_before = NEXT_INSN (last_loop_insn);
604           copy_end = last_loop_insn;
605         }
606       else
607         {
608           /* We currently can't unroll a loop if it doesn't end with a
609              JUMP_INSN.  There would need to be a mechanism that recognizes
610              this case, and then inserts a jump after each loop body, which
611              jumps to after the last loop body.  */
612           if (loop_dump_stream)
613             fprintf (loop_dump_stream,
614                      "Unrolling failure: loop does not end with a JUMP_INSN.\n");
615           return;
616         }
617
618       /* If copying exit test branches because they can not be eliminated,
619          then must convert the fall through case of the branch to a jump past
620          the end of the loop.  Create a label to emit after the loop and save
621          it for later use.  Do not use the label after the loop, if any, since
622          it might be used by insns outside the loop, or there might be insns
623          added before it later by final_[bg]iv_value which must be after
624          the real exit label.  */
625       exit_label = gen_label_rtx ();
626
627       insn = loop_start;
628       while (GET_CODE (insn) != CODE_LABEL && GET_CODE (insn) != JUMP_INSN)
629         insn = NEXT_INSN (insn);
630
631       if (GET_CODE (insn) == JUMP_INSN)
632         {
633           /* The loop starts with a jump down to the exit condition test.
634              Start copying the loop after the barrier following this
635              jump insn.  */
636           copy_start = NEXT_INSN (insn);
637
638           /* Splitting induction variables doesn't work when the loop is
639              entered via a jump to the bottom, because then we end up doing
640              a comparison against a new register for a split variable, but
641              we did not execute the set insn for the new register because
642              it was skipped over.  */
643           splitting_not_safe = 1;
644           if (loop_dump_stream)
645             fprintf (loop_dump_stream,
646                      "Splitting not safe, because loop not entered at top.\n");
647         }
648       else
649         copy_start = loop_start;
650     }
651
652   /* This should always be the first label in the loop.  */
653   start_label = NEXT_INSN (copy_start);
654   /* There may be a line number note and/or a loop continue note here.  */
655   while (GET_CODE (start_label) == NOTE)
656     start_label = NEXT_INSN (start_label);
657   if (GET_CODE (start_label) != CODE_LABEL)
658     {
659       /* This can happen as a result of jump threading.  If the first insns in
660          the loop test the same condition as the loop's backward jump, or the
661          opposite condition, then the backward jump will be modified to point
662          to elsewhere, and the loop's start label is deleted.
663
664          This case currently can not be handled by the loop unrolling code.  */
665
666       if (loop_dump_stream)
667         fprintf (loop_dump_stream,
668                  "Unrolling failure: unknown insns between BEG note and loop label.\n");
669       return;
670     }
671   if (LABEL_NAME (start_label))
672     {
673       /* The jump optimization pass must have combined the original start label
674          with a named label for a goto.  We can't unroll this case because
675          jumps which go to the named label must be handled differently than
676          jumps to the loop start, and it is impossible to differentiate them
677          in this case.  */
678       if (loop_dump_stream)
679         fprintf (loop_dump_stream,
680                  "Unrolling failure: loop start label is gone\n");
681       return;
682     }
683
684   if (unroll_type == UNROLL_NAIVE
685       && GET_CODE (last_loop_insn) == BARRIER
686       && GET_CODE (PREV_INSN (last_loop_insn)) == JUMP_INSN
687       && start_label != JUMP_LABEL (PREV_INSN (last_loop_insn)))
688     {
689       /* In this case, we must copy the jump and barrier, because they will
690          not be converted to jumps to an immediately following label.  */
691
692       insert_before = NEXT_INSN (last_loop_insn);
693       copy_end = last_loop_insn;
694     }
695
696   if (unroll_type == UNROLL_NAIVE
697       && GET_CODE (last_loop_insn) == JUMP_INSN
698       && start_label != JUMP_LABEL (last_loop_insn))
699     {
700       /* ??? The loop ends with a conditional branch that does not branch back
701          to the loop start label.  In this case, we must emit an unconditional
702          branch to the loop exit after emitting the final branch.
703          copy_loop_body does not have support for this currently, so we
704          give up.  It doesn't seem worthwhile to unroll anyways since
705          unrolling would increase the number of branch instructions
706          executed.  */
707       if (loop_dump_stream)
708         fprintf (loop_dump_stream,
709                  "Unrolling failure: final conditional branch not to loop start\n");
710       return;
711     }
712
713   /* Allocate a translation table for the labels and insn numbers.
714      They will be filled in as we copy the insns in the loop.  */
715
716   max_labelno = max_label_num ();
717   max_insnno = get_max_uid ();
718
719   /* Various paths through the unroll code may reach the "egress" label
720      without initializing fields within the map structure.
721
722      To be safe, we use xcalloc to zero the memory.  */
723   map = (struct inline_remap *) xcalloc (1, sizeof (struct inline_remap));
724
725   /* Allocate the label map.  */
726
727   if (max_labelno > 0)
728     {
729       map->label_map = (rtx *) xmalloc (max_labelno * sizeof (rtx));
730
731       local_label = (char *) xcalloc (max_labelno, sizeof (char));
732     }
733
734   /* Search the loop and mark all local labels, i.e. the ones which have to
735      be distinct labels when copied.  For all labels which might be
736      non-local, set their label_map entries to point to themselves.
737      If they happen to be local their label_map entries will be overwritten
738      before the loop body is copied.  The label_map entries for local labels
739      will be set to a different value each time the loop body is copied.  */
740
741   for (insn = copy_start; insn != loop_end; insn = NEXT_INSN (insn))
742     {
743       rtx note;
744
745       if (GET_CODE (insn) == CODE_LABEL)
746         local_label[CODE_LABEL_NUMBER (insn)] = 1;
747       else if (GET_CODE (insn) == JUMP_INSN)
748         {
749           if (JUMP_LABEL (insn))
750             set_label_in_map (map,
751                               CODE_LABEL_NUMBER (JUMP_LABEL (insn)),
752                               JUMP_LABEL (insn));
753           else if (GET_CODE (PATTERN (insn)) == ADDR_VEC
754                    || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
755             {
756               rtx pat = PATTERN (insn);
757               int diff_vec_p = GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC;
758               int len = XVECLEN (pat, diff_vec_p);
759               rtx label;
760
761               for (i = 0; i < len; i++)
762                 {
763                   label = XEXP (XVECEXP (pat, diff_vec_p, i), 0);
764                   set_label_in_map (map, CODE_LABEL_NUMBER (label), label);
765                 }
766             }
767         }
768       if ((note = find_reg_note (insn, REG_LABEL, NULL_RTX)))
769         set_label_in_map (map, CODE_LABEL_NUMBER (XEXP (note, 0)),
770                           XEXP (note, 0));
771     }
772
773   /* Allocate space for the insn map.  */
774
775   map->insn_map = (rtx *) xmalloc (max_insnno * sizeof (rtx));
776
777   /* Set this to zero, to indicate that we are doing loop unrolling,
778      not function inlining.  */
779   map->inline_target = 0;
780
781   /* The register and constant maps depend on the number of registers
782      present, so the final maps can't be created until after
783      find_splittable_regs is called.  However, they are needed for
784      preconditioning, so we create temporary maps when preconditioning
785      is performed.  */
786
787   /* The preconditioning code may allocate two new pseudo registers.  */
788   maxregnum = max_reg_num ();
789
790   /* local_regno is only valid for regnos < max_local_regnum.  */
791   max_local_regnum = maxregnum;
792
793   /* Allocate and zero out the splittable_regs and addr_combined_regs
794      arrays.  These must be zeroed here because they will be used if
795      loop preconditioning is performed, and must be zero for that case.
796
797      It is safe to do this here, since the extra registers created by the
798      preconditioning code and find_splittable_regs will never be used
799      to access the splittable_regs[] and addr_combined_regs[] arrays.  */
800
801   splittable_regs = (rtx *) xcalloc (maxregnum, sizeof (rtx));
802   splittable_regs_updates = (int *) xcalloc (maxregnum, sizeof (int));
803   addr_combined_regs
804     = (struct induction **) xcalloc (maxregnum, sizeof (struct induction *));
805   local_regno = (char *) xcalloc (maxregnum, sizeof (char));
806
807   /* Mark all local registers, i.e. the ones which are referenced only
808      inside the loop.  */
809   if (INSN_UID (copy_end) < max_uid_for_loop)
810     {
811       int copy_start_luid = INSN_LUID (copy_start);
812       int copy_end_luid = INSN_LUID (copy_end);
813
814       /* If a register is used in the jump insn, we must not duplicate it
815          since it will also be used outside the loop.  */
816       if (GET_CODE (copy_end) == JUMP_INSN)
817         copy_end_luid--;
818
819       /* If we have a target that uses cc0, then we also must not duplicate
820          the insn that sets cc0 before the jump insn, if one is present.  */
821 #ifdef HAVE_cc0
822       if (GET_CODE (copy_end) == JUMP_INSN
823           && sets_cc0_p (PREV_INSN (copy_end)))
824         copy_end_luid--;
825 #endif
826
827       /* If copy_start points to the NOTE that starts the loop, then we must
828          use the next luid, because invariant pseudo-regs moved out of the loop
829          have their lifetimes modified to start here, but they are not safe
830          to duplicate.  */
831       if (copy_start == loop_start)
832         copy_start_luid++;
833
834       /* If a pseudo's lifetime is entirely contained within this loop, then we
835          can use a different pseudo in each unrolled copy of the loop.  This
836          results in better code.  */
837       /* We must limit the generic test to max_reg_before_loop, because only
838          these pseudo registers have valid regno_first_uid info.  */
839       for (r = FIRST_PSEUDO_REGISTER; r < max_reg_before_loop; ++r)
840         if (REGNO_FIRST_UID (r) > 0 && REGNO_FIRST_UID (r) <= max_uid_for_loop
841             && REGNO_FIRST_LUID (r) >= copy_start_luid
842             && REGNO_LAST_UID (r) > 0 && REGNO_LAST_UID (r) <= max_uid_for_loop
843             && REGNO_LAST_LUID (r) <= copy_end_luid)
844           {
845             /* However, we must also check for loop-carried dependencies.
846                If the value the pseudo has at the end of iteration X is
847                used by iteration X+1, then we can not use a different pseudo
848                for each unrolled copy of the loop.  */
849             /* A pseudo is safe if regno_first_uid is a set, and this
850                set dominates all instructions from regno_first_uid to
851                regno_last_uid.  */
852             /* ??? This check is simplistic.  We would get better code if
853                this check was more sophisticated.  */
854             if (set_dominates_use (r, REGNO_FIRST_UID (r), REGNO_LAST_UID (r),
855                                    copy_start, copy_end))
856               local_regno[r] = 1;
857
858             if (loop_dump_stream)
859               {
860                 if (local_regno[r])
861                   fprintf (loop_dump_stream, "Marked reg %d as local\n", r);
862                 else
863                   fprintf (loop_dump_stream, "Did not mark reg %d as local\n",
864                            r);
865               }
866           }
867     }
868
869   /* If this loop requires exit tests when unrolled, check to see if we
870      can precondition the loop so as to make the exit tests unnecessary.
871      Just like variable splitting, this is not safe if the loop is entered
872      via a jump to the bottom.  Also, can not do this if no strength
873      reduce info, because precondition_loop_p uses this info.  */
874
875   /* Must copy the loop body for preconditioning before the following
876      find_splittable_regs call since that will emit insns which need to
877      be after the preconditioned loop copies, but immediately before the
878      unrolled loop copies.  */
879
880   /* Also, it is not safe to split induction variables for the preconditioned
881      copies of the loop body.  If we split induction variables, then the code
882      assumes that each induction variable can be represented as a function
883      of its initial value and the loop iteration number.  This is not true
884      in this case, because the last preconditioned copy of the loop body
885      could be any iteration from the first up to the `unroll_number-1'th,
886      depending on the initial value of the iteration variable.  Therefore
887      we can not split induction variables here, because we can not calculate
888      their value.  Hence, this code must occur before find_splittable_regs
889      is called.  */
890
891   if (unroll_type == UNROLL_NAIVE && ! splitting_not_safe && strength_reduce_p)
892     {
893       rtx initial_value, final_value, increment;
894       enum machine_mode mode;
895
896       if (precondition_loop_p (loop,
897                                &initial_value, &final_value, &increment,
898                                &mode))
899         {
900           register rtx diff;
901           rtx *labels;
902           int abs_inc, neg_inc;
903
904           map->reg_map = (rtx *) xmalloc (maxregnum * sizeof (rtx));
905
906           VARRAY_CONST_EQUIV_INIT (map->const_equiv_varray, maxregnum,
907                                    "unroll_loop_precondition");
908           global_const_equiv_varray = map->const_equiv_varray;
909
910           init_reg_map (map, maxregnum);
911
912           /* Limit loop unrolling to 4, since this will make 7 copies of
913              the loop body.  */
914           if (unroll_number > 4)
915             unroll_number = 4;
916
917           /* Save the absolute value of the increment, and also whether or
918              not it is negative.  */
919           neg_inc = 0;
920           abs_inc = INTVAL (increment);
921           if (abs_inc < 0)
922             {
923               abs_inc = -abs_inc;
924               neg_inc = 1;
925             }
926
927           start_sequence ();
928
929           /* Calculate the difference between the final and initial values.
930              Final value may be a (plus (reg x) (const_int 1)) rtx.
931              Let the following cse pass simplify this if initial value is
932              a constant.
933
934              We must copy the final and initial values here to avoid
935              improperly shared rtl.  */
936
937           diff = expand_binop (mode, sub_optab, copy_rtx (final_value),
938                                copy_rtx (initial_value), NULL_RTX, 0,
939                                OPTAB_LIB_WIDEN);
940
941           /* Now calculate (diff % (unroll * abs (increment))) by using an
942              and instruction.  */
943           diff = expand_binop (GET_MODE (diff), and_optab, diff,
944                                GEN_INT (unroll_number * abs_inc - 1),
945                                NULL_RTX, 0, OPTAB_LIB_WIDEN);
946
947           /* Now emit a sequence of branches to jump to the proper precond
948              loop entry point.  */
949
950           labels = (rtx *) xmalloc (sizeof (rtx) * unroll_number);
951           for (i = 0; i < unroll_number; i++)
952             labels[i] = gen_label_rtx ();
953
954           /* Check for the case where the initial value is greater than or
955              equal to the final value.  In that case, we want to execute
956              exactly one loop iteration.  The code below will fail for this
957              case.  This check does not apply if the loop has a NE
958              comparison at the end.  */
959
960           if (loop_info->comparison_code != NE)
961             {
962               emit_cmp_and_jump_insns (initial_value, final_value,
963                                        neg_inc ? LE : GE,
964                                        NULL_RTX, mode, 0, 0, labels[1]);
965               JUMP_LABEL (get_last_insn ()) = labels[1];
966               LABEL_NUSES (labels[1])++;
967             }
968
969           /* Assuming the unroll_number is 4, and the increment is 2, then
970              for a negative increment:  for a positive increment:
971              diff = 0,1   precond 0     diff = 0,7   precond 0
972              diff = 2,3   precond 3     diff = 1,2   precond 1
973              diff = 4,5   precond 2     diff = 3,4   precond 2
974              diff = 6,7   precond 1     diff = 5,6   precond 3  */
975
976           /* We only need to emit (unroll_number - 1) branches here, the
977              last case just falls through to the following code.  */
978
979           /* ??? This would give better code if we emitted a tree of branches
980              instead of the current linear list of branches.  */
981
982           for (i = 0; i < unroll_number - 1; i++)
983             {
984               int cmp_const;
985               enum rtx_code cmp_code;
986
987               /* For negative increments, must invert the constant compared
988                  against, except when comparing against zero.  */
989               if (i == 0)
990                 {
991                   cmp_const = 0;
992                   cmp_code = EQ;
993                 }
994               else if (neg_inc)
995                 {
996                   cmp_const = unroll_number - i;
997                   cmp_code = GE;
998                 }
999               else
1000                 {
1001                   cmp_const = i;
1002                   cmp_code = LE;
1003                 }
1004
1005               emit_cmp_and_jump_insns (diff, GEN_INT (abs_inc * cmp_const),
1006                                        cmp_code, NULL_RTX, mode, 0, 0,
1007                                        labels[i]);
1008               JUMP_LABEL (get_last_insn ()) = labels[i];
1009               LABEL_NUSES (labels[i])++;
1010             }
1011
1012           /* If the increment is greater than one, then we need another branch,
1013              to handle other cases equivalent to 0.  */
1014
1015           /* ??? This should be merged into the code above somehow to help
1016              simplify the code here, and reduce the number of branches emitted.
1017              For the negative increment case, the branch here could easily
1018              be merged with the `0' case branch above.  For the positive
1019              increment case, it is not clear how this can be simplified.  */
1020
1021           if (abs_inc != 1)
1022             {
1023               int cmp_const;
1024               enum rtx_code cmp_code;
1025
1026               if (neg_inc)
1027                 {
1028                   cmp_const = abs_inc - 1;
1029                   cmp_code = LE;
1030                 }
1031               else
1032                 {
1033                   cmp_const = abs_inc * (unroll_number - 1) + 1;
1034                   cmp_code = GE;
1035                 }
1036
1037               emit_cmp_and_jump_insns (diff, GEN_INT (cmp_const), cmp_code,
1038                                        NULL_RTX, mode, 0, 0, labels[0]);
1039               JUMP_LABEL (get_last_insn ()) = labels[0];
1040               LABEL_NUSES (labels[0])++;
1041             }
1042
1043           sequence = gen_sequence ();
1044           end_sequence ();
1045           loop_insn_hoist (loop, sequence);
1046
1047           /* Only the last copy of the loop body here needs the exit
1048              test, so set copy_end to exclude the compare/branch here,
1049              and then reset it inside the loop when get to the last
1050              copy.  */
1051
1052           if (GET_CODE (last_loop_insn) == BARRIER)
1053             copy_end = PREV_INSN (PREV_INSN (last_loop_insn));
1054           else if (GET_CODE (last_loop_insn) == JUMP_INSN)
1055             {
1056               copy_end = PREV_INSN (last_loop_insn);
1057 #ifdef HAVE_cc0
1058               /* The immediately preceding insn may be a compare which
1059                  we do not want to copy.  */
1060               if (sets_cc0_p (PREV_INSN (copy_end)))
1061                 copy_end = PREV_INSN (copy_end);
1062 #endif
1063             }
1064           else
1065             abort ();
1066
1067           for (i = 1; i < unroll_number; i++)
1068             {
1069               emit_label_after (labels[unroll_number - i],
1070                                 PREV_INSN (loop_start));
1071
1072               memset ((char *) map->insn_map, 0, max_insnno * sizeof (rtx));
1073               memset ((char *) &VARRAY_CONST_EQUIV (map->const_equiv_varray, 0),
1074                       0, (VARRAY_SIZE (map->const_equiv_varray)
1075                           * sizeof (struct const_equiv_data)));
1076               map->const_age = 0;
1077
1078               for (j = 0; j < max_labelno; j++)
1079                 if (local_label[j])
1080                   set_label_in_map (map, j, gen_label_rtx ());
1081
1082               for (r = FIRST_PSEUDO_REGISTER; r < max_local_regnum; r++)
1083                 if (local_regno[r])
1084                   {
1085                     map->reg_map[r]
1086                       = gen_reg_rtx (GET_MODE (regno_reg_rtx[r]));
1087                     record_base_value (REGNO (map->reg_map[r]),
1088                                        regno_reg_rtx[r], 0);
1089                   }
1090               /* The last copy needs the compare/branch insns at the end,
1091                  so reset copy_end here if the loop ends with a conditional
1092                  branch.  */
1093
1094               if (i == unroll_number - 1)
1095                 {
1096                   if (GET_CODE (last_loop_insn) == BARRIER)
1097                     copy_end = PREV_INSN (PREV_INSN (last_loop_insn));
1098                   else
1099                     copy_end = last_loop_insn;
1100                 }
1101
1102               /* None of the copies are the `last_iteration', so just
1103                  pass zero for that parameter.  */
1104               copy_loop_body (loop, copy_start, copy_end, map, exit_label, 0,
1105                               unroll_type, start_label, loop_end,
1106                               loop_start, copy_end);
1107             }
1108           emit_label_after (labels[0], PREV_INSN (loop_start));
1109
1110           if (GET_CODE (last_loop_insn) == BARRIER)
1111             {
1112               insert_before = PREV_INSN (last_loop_insn);
1113               copy_end = PREV_INSN (insert_before);
1114             }
1115           else
1116             {
1117               insert_before = last_loop_insn;
1118 #ifdef HAVE_cc0
1119               /* The instruction immediately before the JUMP_INSN may
1120                  be a compare instruction which we do not want to copy
1121                  or delete.  */
1122               if (sets_cc0_p (PREV_INSN (insert_before)))
1123                 insert_before = PREV_INSN (insert_before);
1124 #endif
1125               copy_end = PREV_INSN (insert_before);
1126             }
1127
1128           /* Set unroll type to MODULO now.  */
1129           unroll_type = UNROLL_MODULO;
1130           loop_preconditioned = 1;
1131
1132           /* Clean up.  */
1133           free (labels);
1134         }
1135     }
1136
1137   /* If reach here, and the loop type is UNROLL_NAIVE, then don't unroll
1138      the loop unless all loops are being unrolled.  */
1139   if (unroll_type == UNROLL_NAIVE && ! flag_unroll_all_loops)
1140     {
1141       if (loop_dump_stream)
1142         fprintf (loop_dump_stream,
1143                  "Unrolling failure: Naive unrolling not being done.\n");
1144       goto egress;
1145     }
1146
1147   /* At this point, we are guaranteed to unroll the loop.  */
1148
1149   /* Keep track of the unroll factor for the loop.  */
1150   loop_info->unroll_number = unroll_number;
1151
1152   /* For each biv and giv, determine whether it can be safely split into
1153      a different variable for each unrolled copy of the loop body.
1154      We precalculate and save this info here, since computing it is
1155      expensive.
1156
1157      Do this before deleting any instructions from the loop, so that
1158      back_branch_in_range_p will work correctly.  */
1159
1160   if (splitting_not_safe)
1161     temp = 0;
1162   else
1163     temp = find_splittable_regs (loop, unroll_type, unroll_number);
1164
1165   /* find_splittable_regs may have created some new registers, so must
1166      reallocate the reg_map with the new larger size, and must realloc
1167      the constant maps also.  */
1168
1169   maxregnum = max_reg_num ();
1170   map->reg_map = (rtx *) xmalloc (maxregnum * sizeof (rtx));
1171
1172   init_reg_map (map, maxregnum);
1173
1174   if (map->const_equiv_varray == 0)
1175     VARRAY_CONST_EQUIV_INIT (map->const_equiv_varray,
1176                              maxregnum + temp * unroll_number * 2,
1177                              "unroll_loop");
1178   global_const_equiv_varray = map->const_equiv_varray;
1179
1180   /* Search the list of bivs and givs to find ones which need to be remapped
1181      when split, and set their reg_map entry appropriately.  */
1182
1183   for (bl = ivs->list; bl; bl = bl->next)
1184     {
1185       if (REGNO (bl->biv->src_reg) != bl->regno)
1186         map->reg_map[bl->regno] = bl->biv->src_reg;
1187 #if 0
1188       /* Currently, non-reduced/final-value givs are never split.  */
1189       for (v = bl->giv; v; v = v->next_iv)
1190         if (REGNO (v->src_reg) != bl->regno)
1191           map->reg_map[REGNO (v->dest_reg)] = v->src_reg;
1192 #endif
1193     }
1194
1195   /* Use our current register alignment and pointer flags.  */
1196   map->regno_pointer_align = cfun->emit->regno_pointer_align;
1197   map->x_regno_reg_rtx = cfun->emit->x_regno_reg_rtx;
1198
1199   /* If the loop is being partially unrolled, and the iteration variables
1200      are being split, and are being renamed for the split, then must fix up
1201      the compare/jump instruction at the end of the loop to refer to the new
1202      registers.  This compare isn't copied, so the registers used in it
1203      will never be replaced if it isn't done here.  */
1204
1205   if (unroll_type == UNROLL_MODULO)
1206     {
1207       insn = NEXT_INSN (copy_end);
1208       if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN)
1209         PATTERN (insn) = remap_split_bivs (loop, PATTERN (insn));
1210     }
1211
1212   /* For unroll_number times, make a copy of each instruction
1213      between copy_start and copy_end, and insert these new instructions
1214      before the end of the loop.  */
1215
1216   for (i = 0; i < unroll_number; i++)
1217     {
1218       memset ((char *) map->insn_map, 0, max_insnno * sizeof (rtx));
1219       memset ((char *) &VARRAY_CONST_EQUIV (map->const_equiv_varray, 0), 0,
1220               VARRAY_SIZE (map->const_equiv_varray) * sizeof (struct const_equiv_data));
1221       map->const_age = 0;
1222
1223       for (j = 0; j < max_labelno; j++)
1224         if (local_label[j])
1225           set_label_in_map (map, j, gen_label_rtx ());
1226
1227       for (r = FIRST_PSEUDO_REGISTER; r < max_local_regnum; r++)
1228         if (local_regno[r])
1229           {
1230             map->reg_map[r] = gen_reg_rtx (GET_MODE (regno_reg_rtx[r]));
1231             record_base_value (REGNO (map->reg_map[r]),
1232                                regno_reg_rtx[r], 0);
1233           }
1234
1235       /* If loop starts with a branch to the test, then fix it so that
1236          it points to the test of the first unrolled copy of the loop.  */
1237       if (i == 0 && loop_start != copy_start)
1238         {
1239           insn = PREV_INSN (copy_start);
1240           pattern = PATTERN (insn);
1241
1242           tem = get_label_from_map (map,
1243                                     CODE_LABEL_NUMBER
1244                                     (XEXP (SET_SRC (pattern), 0)));
1245           SET_SRC (pattern) = gen_rtx_LABEL_REF (VOIDmode, tem);
1246
1247           /* Set the jump label so that it can be used by later loop unrolling
1248              passes.  */
1249           JUMP_LABEL (insn) = tem;
1250           LABEL_NUSES (tem)++;
1251         }
1252
1253       copy_loop_body (loop, copy_start, copy_end, map, exit_label,
1254                       i == unroll_number - 1, unroll_type, start_label,
1255                       loop_end, insert_before, insert_before);
1256     }
1257
1258   /* Before deleting any insns, emit a CODE_LABEL immediately after the last
1259      insn to be deleted.  This prevents any runaway delete_insn call from
1260      more insns that it should, as it always stops at a CODE_LABEL.  */
1261
1262   /* Delete the compare and branch at the end of the loop if completely
1263      unrolling the loop.  Deleting the backward branch at the end also
1264      deletes the code label at the start of the loop.  This is done at
1265      the very end to avoid problems with back_branch_in_range_p.  */
1266
1267   if (unroll_type == UNROLL_COMPLETELY)
1268     safety_label = emit_label_after (gen_label_rtx (), last_loop_insn);
1269   else
1270     safety_label = emit_label_after (gen_label_rtx (), copy_end);
1271
1272   /* Delete all of the original loop instructions.  Don't delete the
1273      LOOP_BEG note, or the first code label in the loop.  */
1274
1275   insn = NEXT_INSN (copy_start);
1276   while (insn != safety_label)
1277     {
1278       /* ??? Don't delete named code labels.  They will be deleted when the
1279          jump that references them is deleted.  Otherwise, we end up deleting
1280          them twice, which causes them to completely disappear instead of turn
1281          into NOTE_INSN_DELETED_LABEL notes.  This in turn causes aborts in
1282          dwarfout.c/dwarf2out.c.  We could perhaps fix the dwarf*out.c files
1283          to handle deleted labels instead.  Or perhaps fix DECL_RTL of the
1284          associated LABEL_DECL to point to one of the new label instances.  */
1285       /* ??? Likewise, we can't delete a NOTE_INSN_DELETED_LABEL note.  */
1286       if (insn != start_label
1287           && ! (GET_CODE (insn) == CODE_LABEL && LABEL_NAME (insn))
1288           && ! (GET_CODE (insn) == NOTE
1289                 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))
1290         insn = delete_insn (insn);
1291       else
1292         insn = NEXT_INSN (insn);
1293     }
1294
1295   /* Can now delete the 'safety' label emitted to protect us from runaway
1296      delete_insn calls.  */
1297   if (INSN_DELETED_P (safety_label))
1298     abort ();
1299   delete_insn (safety_label);
1300
1301   /* If exit_label exists, emit it after the loop.  Doing the emit here
1302      forces it to have a higher INSN_UID than any insn in the unrolled loop.
1303      This is needed so that mostly_true_jump in reorg.c will treat jumps
1304      to this loop end label correctly, i.e. predict that they are usually
1305      not taken.  */
1306   if (exit_label)
1307     emit_label_after (exit_label, loop_end);
1308
1309  egress:
1310   if (unroll_type == UNROLL_COMPLETELY)
1311     {
1312       /* Remove the loop notes since this is no longer a loop.  */
1313       if (loop->vtop)
1314         delete_insn (loop->vtop);
1315       if (loop->cont)
1316         delete_insn (loop->cont);
1317       if (loop_start)
1318         delete_insn (loop_start);
1319       if (loop_end)
1320         delete_insn (loop_end);
1321     }
1322
1323   if (map->const_equiv_varray)
1324     VARRAY_FREE (map->const_equiv_varray);
1325   if (map->label_map)
1326     {
1327       free (map->label_map);
1328       free (local_label);
1329     }
1330   free (map->insn_map);
1331   free (splittable_regs);
1332   free (splittable_regs_updates);
1333   free (addr_combined_regs);
1334   free (local_regno);
1335   if (map->reg_map)
1336     free (map->reg_map);
1337   free (map);
1338 }
1339 \f
1340 /* Return true if the loop can be safely, and profitably, preconditioned
1341    so that the unrolled copies of the loop body don't need exit tests.
1342
1343    This only works if final_value, initial_value and increment can be
1344    determined, and if increment is a constant power of 2.
1345    If increment is not a power of 2, then the preconditioning modulo
1346    operation would require a real modulo instead of a boolean AND, and this
1347    is not considered `profitable'.  */
1348
1349 /* ??? If the loop is known to be executed very many times, or the machine
1350    has a very cheap divide instruction, then preconditioning is a win even
1351    when the increment is not a power of 2.  Use RTX_COST to compute
1352    whether divide is cheap.
1353    ??? A divide by constant doesn't actually need a divide, look at
1354    expand_divmod.  The reduced cost of this optimized modulo is not
1355    reflected in RTX_COST.  */
1356
1357 int
1358 precondition_loop_p (loop, initial_value, final_value, increment, mode)
1359      const struct loop *loop;
1360      rtx *initial_value, *final_value, *increment;
1361      enum machine_mode *mode;
1362 {
1363   rtx loop_start = loop->start;
1364   struct loop_info *loop_info = LOOP_INFO (loop);
1365
1366   if (loop_info->n_iterations > 0)
1367     {
1368       *initial_value = const0_rtx;
1369       *increment = const1_rtx;
1370       *final_value = GEN_INT (loop_info->n_iterations);
1371       *mode = word_mode;
1372
1373       if (loop_dump_stream)
1374         {
1375           fputs ("Preconditioning: Success, number of iterations known, ",
1376                  loop_dump_stream);
1377           fprintf (loop_dump_stream, HOST_WIDE_INT_PRINT_DEC,
1378                    loop_info->n_iterations);
1379           fputs (".\n", loop_dump_stream);
1380         }
1381       return 1;
1382     }
1383
1384   if (loop_info->iteration_var == 0)
1385     {
1386       if (loop_dump_stream)
1387         fprintf (loop_dump_stream,
1388                  "Preconditioning: Could not find iteration variable.\n");
1389       return 0;
1390     }
1391   else if (loop_info->initial_value == 0)
1392     {
1393       if (loop_dump_stream)
1394         fprintf (loop_dump_stream,
1395                  "Preconditioning: Could not find initial value.\n");
1396       return 0;
1397     }
1398   else if (loop_info->increment == 0)
1399     {
1400       if (loop_dump_stream)
1401         fprintf (loop_dump_stream,
1402                  "Preconditioning: Could not find increment value.\n");
1403       return 0;
1404     }
1405   else if (GET_CODE (loop_info->increment) != CONST_INT)
1406     {
1407       if (loop_dump_stream)
1408         fprintf (loop_dump_stream,
1409                  "Preconditioning: Increment not a constant.\n");
1410       return 0;
1411     }
1412   else if ((exact_log2 (INTVAL (loop_info->increment)) < 0)
1413            && (exact_log2 (-INTVAL (loop_info->increment)) < 0))
1414     {
1415       if (loop_dump_stream)
1416         fprintf (loop_dump_stream,
1417                  "Preconditioning: Increment not a constant power of 2.\n");
1418       return 0;
1419     }
1420
1421   /* Unsigned_compare and compare_dir can be ignored here, since they do
1422      not matter for preconditioning.  */
1423
1424   if (loop_info->final_value == 0)
1425     {
1426       if (loop_dump_stream)
1427         fprintf (loop_dump_stream,
1428                  "Preconditioning: EQ comparison loop.\n");
1429       return 0;
1430     }
1431
1432   /* Must ensure that final_value is invariant, so call
1433      loop_invariant_p to check.  Before doing so, must check regno
1434      against max_reg_before_loop to make sure that the register is in
1435      the range covered by loop_invariant_p.  If it isn't, then it is
1436      most likely a biv/giv which by definition are not invariant.  */
1437   if ((GET_CODE (loop_info->final_value) == REG
1438        && REGNO (loop_info->final_value) >= max_reg_before_loop)
1439       || (GET_CODE (loop_info->final_value) == PLUS
1440           && REGNO (XEXP (loop_info->final_value, 0)) >= max_reg_before_loop)
1441       || ! loop_invariant_p (loop, loop_info->final_value))
1442     {
1443       if (loop_dump_stream)
1444         fprintf (loop_dump_stream,
1445                  "Preconditioning: Final value not invariant.\n");
1446       return 0;
1447     }
1448
1449   /* Fail for floating point values, since the caller of this function
1450      does not have code to deal with them.  */
1451   if (GET_MODE_CLASS (GET_MODE (loop_info->final_value)) == MODE_FLOAT
1452       || GET_MODE_CLASS (GET_MODE (loop_info->initial_value)) == MODE_FLOAT)
1453     {
1454       if (loop_dump_stream)
1455         fprintf (loop_dump_stream,
1456                  "Preconditioning: Floating point final or initial value.\n");
1457       return 0;
1458     }
1459
1460   /* Fail if loop_info->iteration_var is not live before loop_start,
1461      since we need to test its value in the preconditioning code.  */
1462
1463   if (REGNO_FIRST_LUID (REGNO (loop_info->iteration_var))
1464       > INSN_LUID (loop_start))
1465     {
1466       if (loop_dump_stream)
1467         fprintf (loop_dump_stream,
1468                  "Preconditioning: Iteration var not live before loop start.\n");
1469       return 0;
1470     }
1471
1472   /* Note that loop_iterations biases the initial value for GIV iterators
1473      such as "while (i-- > 0)" so that we can calculate the number of
1474      iterations just like for BIV iterators.
1475
1476      Also note that the absolute values of initial_value and
1477      final_value are unimportant as only their difference is used for
1478      calculating the number of loop iterations.  */
1479   *initial_value = loop_info->initial_value;
1480   *increment = loop_info->increment;
1481   *final_value = loop_info->final_value;
1482
1483   /* Decide what mode to do these calculations in.  Choose the larger
1484      of final_value's mode and initial_value's mode, or a full-word if
1485      both are constants.  */
1486   *mode = GET_MODE (*final_value);
1487   if (*mode == VOIDmode)
1488     {
1489       *mode = GET_MODE (*initial_value);
1490       if (*mode == VOIDmode)
1491         *mode = word_mode;
1492     }
1493   else if (*mode != GET_MODE (*initial_value)
1494            && (GET_MODE_SIZE (*mode)
1495                < GET_MODE_SIZE (GET_MODE (*initial_value))))
1496     *mode = GET_MODE (*initial_value);
1497
1498   /* Success!  */
1499   if (loop_dump_stream)
1500     fprintf (loop_dump_stream, "Preconditioning: Successful.\n");
1501   return 1;
1502 }
1503
1504 /* All pseudo-registers must be mapped to themselves.  Two hard registers
1505    must be mapped, VIRTUAL_STACK_VARS_REGNUM and VIRTUAL_INCOMING_ARGS_
1506    REGNUM, to avoid function-inlining specific conversions of these
1507    registers.  All other hard regs can not be mapped because they may be
1508    used with different
1509    modes.  */
1510
1511 static void
1512 init_reg_map (map, maxregnum)
1513      struct inline_remap *map;
1514      int maxregnum;
1515 {
1516   int i;
1517
1518   for (i = maxregnum - 1; i > LAST_VIRTUAL_REGISTER; i--)
1519     map->reg_map[i] = regno_reg_rtx[i];
1520   /* Just clear the rest of the entries.  */
1521   for (i = LAST_VIRTUAL_REGISTER; i >= 0; i--)
1522     map->reg_map[i] = 0;
1523
1524   map->reg_map[VIRTUAL_STACK_VARS_REGNUM]
1525     = regno_reg_rtx[VIRTUAL_STACK_VARS_REGNUM];
1526   map->reg_map[VIRTUAL_INCOMING_ARGS_REGNUM]
1527     = regno_reg_rtx[VIRTUAL_INCOMING_ARGS_REGNUM];
1528 }
1529 \f
1530 /* Strength-reduction will often emit code for optimized biv/givs which
1531    calculates their value in a temporary register, and then copies the result
1532    to the iv.  This procedure reconstructs the pattern computing the iv;
1533    verifying that all operands are of the proper form.
1534
1535    PATTERN must be the result of single_set.
1536    The return value is the amount that the giv is incremented by.  */
1537
1538 static rtx
1539 calculate_giv_inc (pattern, src_insn, regno)
1540      rtx pattern, src_insn;
1541      unsigned int regno;
1542 {
1543   rtx increment;
1544   rtx increment_total = 0;
1545   int tries = 0;
1546
1547  retry:
1548   /* Verify that we have an increment insn here.  First check for a plus
1549      as the set source.  */
1550   if (GET_CODE (SET_SRC (pattern)) != PLUS)
1551     {
1552       /* SR sometimes computes the new giv value in a temp, then copies it
1553          to the new_reg.  */
1554       src_insn = PREV_INSN (src_insn);
1555       pattern = PATTERN (src_insn);
1556       if (GET_CODE (SET_SRC (pattern)) != PLUS)
1557         abort ();
1558
1559       /* The last insn emitted is not needed, so delete it to avoid confusing
1560          the second cse pass.  This insn sets the giv unnecessarily.  */
1561       delete_insn (get_last_insn ());
1562     }
1563
1564   /* Verify that we have a constant as the second operand of the plus.  */
1565   increment = XEXP (SET_SRC (pattern), 1);
1566   if (GET_CODE (increment) != CONST_INT)
1567     {
1568       /* SR sometimes puts the constant in a register, especially if it is
1569          too big to be an add immed operand.  */
1570       src_insn = PREV_INSN (src_insn);
1571       increment = SET_SRC (PATTERN (src_insn));
1572
1573       /* SR may have used LO_SUM to compute the constant if it is too large
1574          for a load immed operand.  In this case, the constant is in operand
1575          one of the LO_SUM rtx.  */
1576       if (GET_CODE (increment) == LO_SUM)
1577         increment = XEXP (increment, 1);
1578
1579       /* Some ports store large constants in memory and add a REG_EQUAL
1580          note to the store insn.  */
1581       else if (GET_CODE (increment) == MEM)
1582         {
1583           rtx note = find_reg_note (src_insn, REG_EQUAL, 0);
1584           if (note)
1585             increment = XEXP (note, 0);
1586         }
1587
1588       else if (GET_CODE (increment) == IOR
1589                || GET_CODE (increment) == ASHIFT
1590                || GET_CODE (increment) == PLUS)
1591         {
1592           /* The rs6000 port loads some constants with IOR.
1593              The alpha port loads some constants with ASHIFT and PLUS.  */
1594           rtx second_part = XEXP (increment, 1);
1595           enum rtx_code code = GET_CODE (increment);
1596
1597           src_insn = PREV_INSN (src_insn);
1598           increment = SET_SRC (PATTERN (src_insn));
1599           /* Don't need the last insn anymore.  */
1600           delete_insn (get_last_insn ());
1601
1602           if (GET_CODE (second_part) != CONST_INT
1603               || GET_CODE (increment) != CONST_INT)
1604             abort ();
1605
1606           if (code == IOR)
1607             increment = GEN_INT (INTVAL (increment) | INTVAL (second_part));
1608           else if (code == PLUS)
1609             increment = GEN_INT (INTVAL (increment) + INTVAL (second_part));
1610           else
1611             increment = GEN_INT (INTVAL (increment) << INTVAL (second_part));
1612         }
1613
1614       if (GET_CODE (increment) != CONST_INT)
1615         abort ();
1616
1617       /* The insn loading the constant into a register is no longer needed,
1618          so delete it.  */
1619       delete_insn (get_last_insn ());
1620     }
1621
1622   if (increment_total)
1623     increment_total = GEN_INT (INTVAL (increment_total) + INTVAL (increment));
1624   else
1625     increment_total = increment;
1626
1627   /* Check that the source register is the same as the register we expected
1628      to see as the source.  If not, something is seriously wrong.  */
1629   if (GET_CODE (XEXP (SET_SRC (pattern), 0)) != REG
1630       || REGNO (XEXP (SET_SRC (pattern), 0)) != regno)
1631     {
1632       /* Some machines (e.g. the romp), may emit two add instructions for
1633          certain constants, so lets try looking for another add immediately
1634          before this one if we have only seen one add insn so far.  */
1635
1636       if (tries == 0)
1637         {
1638           tries++;
1639
1640           src_insn = PREV_INSN (src_insn);
1641           pattern = PATTERN (src_insn);
1642
1643           delete_insn (get_last_insn ());
1644
1645           goto retry;
1646         }
1647
1648       abort ();
1649     }
1650
1651   return increment_total;
1652 }
1653
1654 /* Copy REG_NOTES, except for insn references, because not all insn_map
1655    entries are valid yet.  We do need to copy registers now though, because
1656    the reg_map entries can change during copying.  */
1657
1658 static rtx
1659 initial_reg_note_copy (notes, map)
1660      rtx notes;
1661      struct inline_remap *map;
1662 {
1663   rtx copy;
1664
1665   if (notes == 0)
1666     return 0;
1667
1668   copy = rtx_alloc (GET_CODE (notes));
1669   PUT_MODE (copy, GET_MODE (notes));
1670
1671   if (GET_CODE (notes) == EXPR_LIST)
1672     XEXP (copy, 0) = copy_rtx_and_substitute (XEXP (notes, 0), map, 0);
1673   else if (GET_CODE (notes) == INSN_LIST)
1674     /* Don't substitute for these yet.  */
1675     XEXP (copy, 0) = copy_rtx (XEXP (notes, 0));
1676   else
1677     abort ();
1678
1679   XEXP (copy, 1) = initial_reg_note_copy (XEXP (notes, 1), map);
1680
1681   return copy;
1682 }
1683
1684 /* Fixup insn references in copied REG_NOTES.  */
1685
1686 static void
1687 final_reg_note_copy (notes, map)
1688      rtx notes;
1689      struct inline_remap *map;
1690 {
1691   rtx note;
1692
1693   for (note = notes; note; note = XEXP (note, 1))
1694     if (GET_CODE (note) == INSN_LIST)
1695       XEXP (note, 0) = map->insn_map[INSN_UID (XEXP (note, 0))];
1696 }
1697
1698 /* Copy each instruction in the loop, substituting from map as appropriate.
1699    This is very similar to a loop in expand_inline_function.  */
1700
1701 static void
1702 copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration,
1703                 unroll_type, start_label, loop_end, insert_before,
1704                 copy_notes_from)
1705      struct loop *loop;
1706      rtx copy_start, copy_end;
1707      struct inline_remap *map;
1708      rtx exit_label;
1709      int last_iteration;
1710      enum unroll_types unroll_type;
1711      rtx start_label, loop_end, insert_before, copy_notes_from;
1712 {
1713   struct loop_ivs *ivs = LOOP_IVS (loop);
1714   rtx insn, pattern;
1715   rtx set, tem, copy = NULL_RTX;
1716   int dest_reg_was_split, i;
1717 #ifdef HAVE_cc0
1718   rtx cc0_insn = 0;
1719 #endif
1720   rtx final_label = 0;
1721   rtx giv_inc, giv_dest_reg, giv_src_reg;
1722
1723   /* If this isn't the last iteration, then map any references to the
1724      start_label to final_label.  Final label will then be emitted immediately
1725      after the end of this loop body if it was ever used.
1726
1727      If this is the last iteration, then map references to the start_label
1728      to itself.  */
1729   if (! last_iteration)
1730     {
1731       final_label = gen_label_rtx ();
1732       set_label_in_map (map, CODE_LABEL_NUMBER (start_label), final_label);
1733     }
1734   else
1735     set_label_in_map (map, CODE_LABEL_NUMBER (start_label), start_label);
1736
1737   start_sequence ();
1738
1739   /* Emit a NOTE_INSN_DELETED to force at least two insns onto the sequence.
1740      Else gen_sequence could return a raw pattern for a jump which we pass
1741      off to emit_insn_before (instead of emit_jump_insn_before) which causes
1742      a variety of losing behaviors later.  */
1743   emit_note (0, NOTE_INSN_DELETED);
1744
1745   insn = copy_start;
1746   do
1747     {
1748       insn = NEXT_INSN (insn);
1749
1750       map->orig_asm_operands_vector = 0;
1751
1752       switch (GET_CODE (insn))
1753         {
1754         case INSN:
1755           pattern = PATTERN (insn);
1756           copy = 0;
1757           giv_inc = 0;
1758
1759           /* Check to see if this is a giv that has been combined with
1760              some split address givs.  (Combined in the sense that
1761              `combine_givs' in loop.c has put two givs in the same register.)
1762              In this case, we must search all givs based on the same biv to
1763              find the address givs.  Then split the address givs.
1764              Do this before splitting the giv, since that may map the
1765              SET_DEST to a new register.  */
1766
1767           if ((set = single_set (insn))
1768               && GET_CODE (SET_DEST (set)) == REG
1769               && addr_combined_regs[REGNO (SET_DEST (set))])
1770             {
1771               struct iv_class *bl;
1772               struct induction *v, *tv;
1773               unsigned int regno = REGNO (SET_DEST (set));
1774
1775               v = addr_combined_regs[REGNO (SET_DEST (set))];
1776               bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
1777
1778               /* Although the giv_inc amount is not needed here, we must call
1779                  calculate_giv_inc here since it might try to delete the
1780                  last insn emitted.  If we wait until later to call it,
1781                  we might accidentally delete insns generated immediately
1782                  below by emit_unrolled_add.  */
1783
1784               giv_inc = calculate_giv_inc (set, insn, regno);
1785
1786               /* Now find all address giv's that were combined with this
1787                  giv 'v'.  */
1788               for (tv = bl->giv; tv; tv = tv->next_iv)
1789                 if (tv->giv_type == DEST_ADDR && tv->same == v)
1790                   {
1791                     int this_giv_inc;
1792
1793                     /* If this DEST_ADDR giv was not split, then ignore it.  */
1794                     if (*tv->location != tv->dest_reg)
1795                       continue;
1796
1797                     /* Scale this_giv_inc if the multiplicative factors of
1798                        the two givs are different.  */
1799                     this_giv_inc = INTVAL (giv_inc);
1800                     if (tv->mult_val != v->mult_val)
1801                       this_giv_inc = (this_giv_inc / INTVAL (v->mult_val)
1802                                       * INTVAL (tv->mult_val));
1803
1804                     tv->dest_reg = plus_constant (tv->dest_reg, this_giv_inc);
1805                     *tv->location = tv->dest_reg;
1806
1807                     if (last_iteration && unroll_type != UNROLL_COMPLETELY)
1808                       {
1809                         /* Must emit an insn to increment the split address
1810                            giv.  Add in the const_adjust field in case there
1811                            was a constant eliminated from the address.  */
1812                         rtx value, dest_reg;
1813
1814                         /* tv->dest_reg will be either a bare register,
1815                            or else a register plus a constant.  */
1816                         if (GET_CODE (tv->dest_reg) == REG)
1817                           dest_reg = tv->dest_reg;
1818                         else
1819                           dest_reg = XEXP (tv->dest_reg, 0);
1820
1821                         /* Check for shared address givs, and avoid
1822                            incrementing the shared pseudo reg more than
1823                            once.  */
1824                         if (! tv->same_insn && ! tv->shared)
1825                           {
1826                             /* tv->dest_reg may actually be a (PLUS (REG)
1827                                (CONST)) here, so we must call plus_constant
1828                                to add the const_adjust amount before calling
1829                                emit_unrolled_add below.  */
1830                             value = plus_constant (tv->dest_reg,
1831                                                    tv->const_adjust);
1832
1833                             if (GET_CODE (value) == PLUS)
1834                               {
1835                                 /* The constant could be too large for an add
1836                                    immediate, so can't directly emit an insn
1837                                    here.  */
1838                                 emit_unrolled_add (dest_reg, XEXP (value, 0),
1839                                                    XEXP (value, 1));
1840                               }
1841                           }
1842
1843                         /* Reset the giv to be just the register again, in case
1844                            it is used after the set we have just emitted.
1845                            We must subtract the const_adjust factor added in
1846                            above.  */
1847                         tv->dest_reg = plus_constant (dest_reg,
1848                                                       -tv->const_adjust);
1849                         *tv->location = tv->dest_reg;
1850                       }
1851                   }
1852             }
1853
1854           /* If this is a setting of a splittable variable, then determine
1855              how to split the variable, create a new set based on this split,
1856              and set up the reg_map so that later uses of the variable will
1857              use the new split variable.  */
1858
1859           dest_reg_was_split = 0;
1860
1861           if ((set = single_set (insn))
1862               && GET_CODE (SET_DEST (set)) == REG
1863               && splittable_regs[REGNO (SET_DEST (set))])
1864             {
1865               unsigned int regno = REGNO (SET_DEST (set));
1866               unsigned int src_regno;
1867
1868               dest_reg_was_split = 1;
1869
1870               giv_dest_reg = SET_DEST (set);
1871               giv_src_reg = giv_dest_reg;
1872               /* Compute the increment value for the giv, if it wasn't
1873                  already computed above.  */
1874               if (giv_inc == 0)
1875                 giv_inc = calculate_giv_inc (set, insn, regno);
1876
1877               src_regno = REGNO (giv_src_reg);
1878
1879               if (unroll_type == UNROLL_COMPLETELY)
1880                 {
1881                   /* Completely unrolling the loop.  Set the induction
1882                      variable to a known constant value.  */
1883
1884                   /* The value in splittable_regs may be an invariant
1885                      value, so we must use plus_constant here.  */
1886                   splittable_regs[regno]
1887                     = plus_constant (splittable_regs[src_regno],
1888                                      INTVAL (giv_inc));
1889
1890                   if (GET_CODE (splittable_regs[regno]) == PLUS)
1891                     {
1892                       giv_src_reg = XEXP (splittable_regs[regno], 0);
1893                       giv_inc = XEXP (splittable_regs[regno], 1);
1894                     }
1895                   else
1896                     {
1897                       /* The splittable_regs value must be a REG or a
1898                          CONST_INT, so put the entire value in the giv_src_reg
1899                          variable.  */
1900                       giv_src_reg = splittable_regs[regno];
1901                       giv_inc = const0_rtx;
1902                     }
1903                 }
1904               else
1905                 {
1906                   /* Partially unrolling loop.  Create a new pseudo
1907                      register for the iteration variable, and set it to
1908                      be a constant plus the original register.  Except
1909                      on the last iteration, when the result has to
1910                      go back into the original iteration var register.  */
1911
1912                   /* Handle bivs which must be mapped to a new register
1913                      when split.  This happens for bivs which need their
1914                      final value set before loop entry.  The new register
1915                      for the biv was stored in the biv's first struct
1916                      induction entry by find_splittable_regs.  */
1917
1918                   if (regno < ivs->n_regs
1919                       && REG_IV_TYPE (ivs, regno) == BASIC_INDUCT)
1920                     {
1921                       giv_src_reg = REG_IV_CLASS (ivs, regno)->biv->src_reg;
1922                       giv_dest_reg = giv_src_reg;
1923                     }
1924
1925 #if 0
1926                   /* If non-reduced/final-value givs were split, then
1927                      this would have to remap those givs also.  See
1928                      find_splittable_regs.  */
1929 #endif
1930
1931                   splittable_regs[regno]
1932                     = simplify_gen_binary (PLUS, GET_MODE (giv_src_reg),
1933                                            giv_inc,
1934                                            splittable_regs[src_regno]);
1935                   giv_inc = splittable_regs[regno];
1936
1937                   /* Now split the induction variable by changing the dest
1938                      of this insn to a new register, and setting its
1939                      reg_map entry to point to this new register.
1940
1941                      If this is the last iteration, and this is the last insn
1942                      that will update the iv, then reuse the original dest,
1943                      to ensure that the iv will have the proper value when
1944                      the loop exits or repeats.
1945
1946                      Using splittable_regs_updates here like this is safe,
1947                      because it can only be greater than one if all
1948                      instructions modifying the iv are always executed in
1949                      order.  */
1950
1951                   if (! last_iteration
1952                       || (splittable_regs_updates[regno]-- != 1))
1953                     {
1954                       tem = gen_reg_rtx (GET_MODE (giv_src_reg));
1955                       giv_dest_reg = tem;
1956                       map->reg_map[regno] = tem;
1957                       record_base_value (REGNO (tem),
1958                                          giv_inc == const0_rtx
1959                                          ? giv_src_reg
1960                                          : gen_rtx_PLUS (GET_MODE (giv_src_reg),
1961                                                          giv_src_reg, giv_inc),
1962                                          1);
1963                     }
1964                   else
1965                     map->reg_map[regno] = giv_src_reg;
1966                 }
1967
1968               /* The constant being added could be too large for an add
1969                  immediate, so can't directly emit an insn here.  */
1970               emit_unrolled_add (giv_dest_reg, giv_src_reg, giv_inc);
1971               copy = get_last_insn ();
1972               pattern = PATTERN (copy);
1973             }
1974           else
1975             {
1976               pattern = copy_rtx_and_substitute (pattern, map, 0);
1977               copy = emit_insn (pattern);
1978             }
1979           REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
1980
1981 #ifdef HAVE_cc0
1982           /* If this insn is setting CC0, it may need to look at
1983              the insn that uses CC0 to see what type of insn it is.
1984              In that case, the call to recog via validate_change will
1985              fail.  So don't substitute constants here.  Instead,
1986              do it when we emit the following insn.
1987
1988              For example, see the pyr.md file.  That machine has signed and
1989              unsigned compares.  The compare patterns must check the
1990              following branch insn to see which what kind of compare to
1991              emit.
1992
1993              If the previous insn set CC0, substitute constants on it as
1994              well.  */
1995           if (sets_cc0_p (PATTERN (copy)) != 0)
1996             cc0_insn = copy;
1997           else
1998             {
1999               if (cc0_insn)
2000                 try_constants (cc0_insn, map);
2001               cc0_insn = 0;
2002               try_constants (copy, map);
2003             }
2004 #else
2005           try_constants (copy, map);
2006 #endif
2007
2008           /* Make split induction variable constants `permanent' since we
2009              know there are no backward branches across iteration variable
2010              settings which would invalidate this.  */
2011           if (dest_reg_was_split)
2012             {
2013               int regno = REGNO (SET_DEST (set));
2014
2015               if ((size_t) regno < VARRAY_SIZE (map->const_equiv_varray)
2016                   && (VARRAY_CONST_EQUIV (map->const_equiv_varray, regno).age
2017                       == map->const_age))
2018                 VARRAY_CONST_EQUIV (map->const_equiv_varray, regno).age = -1;
2019             }
2020           break;
2021
2022         case JUMP_INSN:
2023           pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0);
2024           copy = emit_jump_insn (pattern);
2025           REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
2026
2027           if (JUMP_LABEL (insn) == start_label && insn == copy_end
2028               && ! last_iteration)
2029             {
2030               /* Update JUMP_LABEL make invert_jump work correctly.  */
2031               JUMP_LABEL (copy) = get_label_from_map (map,
2032                                                       CODE_LABEL_NUMBER
2033                                                       (JUMP_LABEL (insn)));
2034               LABEL_NUSES (JUMP_LABEL (copy))++;
2035
2036               /* This is a branch to the beginning of the loop; this is the
2037                  last insn being copied; and this is not the last iteration.
2038                  In this case, we want to change the original fall through
2039                  case to be a branch past the end of the loop, and the
2040                  original jump label case to fall_through.  */
2041
2042               if (!invert_jump (copy, exit_label, 0))
2043                 {
2044                   rtx jmp;
2045                   rtx lab = gen_label_rtx ();
2046                   /* Can't do it by reversing the jump (probably because we
2047                      couldn't reverse the conditions), so emit a new
2048                      jump_insn after COPY, and redirect the jump around
2049                      that.  */
2050                   jmp = emit_jump_insn_after (gen_jump (exit_label), copy);
2051                   jmp = emit_barrier_after (jmp);
2052                   emit_label_after (lab, jmp);
2053                   LABEL_NUSES (lab) = 0;
2054                   if (!redirect_jump (copy, lab, 0))
2055                     abort ();
2056                 }
2057             }
2058
2059 #ifdef HAVE_cc0
2060           if (cc0_insn)
2061             try_constants (cc0_insn, map);
2062           cc0_insn = 0;
2063 #endif
2064           try_constants (copy, map);
2065
2066           /* Set the jump label of COPY correctly to avoid problems with
2067              later passes of unroll_loop, if INSN had jump label set.  */
2068           if (JUMP_LABEL (insn))
2069             {
2070               rtx label = 0;
2071
2072               /* Can't use the label_map for every insn, since this may be
2073                  the backward branch, and hence the label was not mapped.  */
2074               if ((set = single_set (copy)))
2075                 {
2076                   tem = SET_SRC (set);
2077                   if (GET_CODE (tem) == LABEL_REF)
2078                     label = XEXP (tem, 0);
2079                   else if (GET_CODE (tem) == IF_THEN_ELSE)
2080                     {
2081                       if (XEXP (tem, 1) != pc_rtx)
2082                         label = XEXP (XEXP (tem, 1), 0);
2083                       else
2084                         label = XEXP (XEXP (tem, 2), 0);
2085                     }
2086                 }
2087
2088               if (label && GET_CODE (label) == CODE_LABEL)
2089                 JUMP_LABEL (copy) = label;
2090               else
2091                 {
2092                   /* An unrecognizable jump insn, probably the entry jump
2093                      for a switch statement.  This label must have been mapped,
2094                      so just use the label_map to get the new jump label.  */
2095                   JUMP_LABEL (copy)
2096                     = get_label_from_map (map,
2097                                           CODE_LABEL_NUMBER (JUMP_LABEL (insn)));
2098                 }
2099
2100               /* If this is a non-local jump, then must increase the label
2101                  use count so that the label will not be deleted when the
2102                  original jump is deleted.  */
2103               LABEL_NUSES (JUMP_LABEL (copy))++;
2104             }
2105           else if (GET_CODE (PATTERN (copy)) == ADDR_VEC
2106                    || GET_CODE (PATTERN (copy)) == ADDR_DIFF_VEC)
2107             {
2108               rtx pat = PATTERN (copy);
2109               int diff_vec_p = GET_CODE (pat) == ADDR_DIFF_VEC;
2110               int len = XVECLEN (pat, diff_vec_p);
2111               int i;
2112
2113               for (i = 0; i < len; i++)
2114                 LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))++;
2115             }
2116
2117           /* If this used to be a conditional jump insn but whose branch
2118              direction is now known, we must do something special.  */
2119           if (any_condjump_p (insn) && onlyjump_p (insn) && map->last_pc_value)
2120             {
2121 #ifdef HAVE_cc0
2122               /* If the previous insn set cc0 for us, delete it.  */
2123               if (sets_cc0_p (PREV_INSN (copy)))
2124                 delete_insn (PREV_INSN (copy));
2125 #endif
2126
2127               /* If this is now a no-op, delete it.  */
2128               if (map->last_pc_value == pc_rtx)
2129                 {
2130                   /* Don't let delete_insn delete the label referenced here,
2131                      because we might possibly need it later for some other
2132                      instruction in the loop.  */
2133                   if (JUMP_LABEL (copy))
2134                     LABEL_NUSES (JUMP_LABEL (copy))++;
2135                   delete_insn (copy);
2136                   if (JUMP_LABEL (copy))
2137                     LABEL_NUSES (JUMP_LABEL (copy))--;
2138                   copy = 0;
2139                 }
2140               else
2141                 /* Otherwise, this is unconditional jump so we must put a
2142                    BARRIER after it.  We could do some dead code elimination
2143                    here, but jump.c will do it just as well.  */
2144                 emit_barrier ();
2145             }
2146           break;
2147
2148         case CALL_INSN:
2149           pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0);
2150           copy = emit_call_insn (pattern);
2151           REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
2152
2153           /* Because the USAGE information potentially contains objects other
2154              than hard registers, we need to copy it.  */
2155           CALL_INSN_FUNCTION_USAGE (copy)
2156             = copy_rtx_and_substitute (CALL_INSN_FUNCTION_USAGE (insn),
2157                                        map, 0);
2158
2159 #ifdef HAVE_cc0
2160           if (cc0_insn)
2161             try_constants (cc0_insn, map);
2162           cc0_insn = 0;
2163 #endif
2164           try_constants (copy, map);
2165
2166           /* Be lazy and assume CALL_INSNs clobber all hard registers.  */
2167           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2168             VARRAY_CONST_EQUIV (map->const_equiv_varray, i).rtx = 0;
2169           break;
2170
2171         case CODE_LABEL:
2172           /* If this is the loop start label, then we don't need to emit a
2173              copy of this label since no one will use it.  */
2174
2175           if (insn != start_label)
2176             {
2177               copy = emit_label (get_label_from_map (map,
2178                                                      CODE_LABEL_NUMBER (insn)));
2179               map->const_age++;
2180             }
2181           break;
2182
2183         case BARRIER:
2184           copy = emit_barrier ();
2185           break;
2186
2187         case NOTE:
2188           /* VTOP and CONT notes are valid only before the loop exit test.
2189              If placed anywhere else, loop may generate bad code.  */
2190           /* BASIC_BLOCK notes exist to stabilize basic block structures with
2191              the associated rtl.  We do not want to share the structure in
2192              this new block.  */
2193
2194           if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED
2195               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED_LABEL
2196               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK
2197               && ((NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_VTOP
2198                    && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_CONT)
2199                   || (last_iteration && unroll_type != UNROLL_COMPLETELY)))
2200             copy = emit_note (NOTE_SOURCE_FILE (insn),
2201                               NOTE_LINE_NUMBER (insn));
2202           else
2203             copy = 0;
2204           break;
2205
2206         default:
2207           abort ();
2208         }
2209
2210       map->insn_map[INSN_UID (insn)] = copy;
2211     }
2212   while (insn != copy_end);
2213
2214   /* Now finish coping the REG_NOTES.  */
2215   insn = copy_start;
2216   do
2217     {
2218       insn = NEXT_INSN (insn);
2219       if ((GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
2220            || GET_CODE (insn) == CALL_INSN)
2221           && map->insn_map[INSN_UID (insn)])
2222         final_reg_note_copy (REG_NOTES (map->insn_map[INSN_UID (insn)]), map);
2223     }
2224   while (insn != copy_end);
2225
2226   /* There may be notes between copy_notes_from and loop_end.  Emit a copy of
2227      each of these notes here, since there may be some important ones, such as
2228      NOTE_INSN_BLOCK_END notes, in this group.  We don't do this on the last
2229      iteration, because the original notes won't be deleted.
2230
2231      We can't use insert_before here, because when from preconditioning,
2232      insert_before points before the loop.  We can't use copy_end, because
2233      there may be insns already inserted after it (which we don't want to
2234      copy) when not from preconditioning code.  */
2235
2236   if (! last_iteration)
2237     {
2238       for (insn = copy_notes_from; insn != loop_end; insn = NEXT_INSN (insn))
2239         {
2240           /* VTOP notes are valid only before the loop exit test.
2241              If placed anywhere else, loop may generate bad code.
2242              There is no need to test for NOTE_INSN_LOOP_CONT notes
2243              here, since COPY_NOTES_FROM will be at most one or two (for cc0)
2244              instructions before the last insn in the loop, and if the
2245              end test is that short, there will be a VTOP note between
2246              the CONT note and the test.  */
2247           if (GET_CODE (insn) == NOTE
2248               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED
2249               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK
2250               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_VTOP)
2251             emit_note (NOTE_SOURCE_FILE (insn), NOTE_LINE_NUMBER (insn));
2252         }
2253     }
2254
2255   if (final_label && LABEL_NUSES (final_label) > 0)
2256     emit_label (final_label);
2257
2258   tem = gen_sequence ();
2259   end_sequence ();
2260   loop_insn_emit_before (loop, 0, insert_before, tem);
2261 }
2262 \f
2263 /* Emit an insn, using the expand_binop to ensure that a valid insn is
2264    emitted.  This will correctly handle the case where the increment value
2265    won't fit in the immediate field of a PLUS insns.  */
2266
2267 void
2268 emit_unrolled_add (dest_reg, src_reg, increment)
2269      rtx dest_reg, src_reg, increment;
2270 {
2271   rtx result;
2272
2273   result = expand_binop (GET_MODE (dest_reg), add_optab, src_reg, increment,
2274                          dest_reg, 0, OPTAB_LIB_WIDEN);
2275
2276   if (dest_reg != result)
2277     emit_move_insn (dest_reg, result);
2278 }
2279 \f
2280 /* Searches the insns between INSN and LOOP->END.  Returns 1 if there
2281    is a backward branch in that range that branches to somewhere between
2282    LOOP->START and INSN.  Returns 0 otherwise.  */
2283
2284 /* ??? This is quadratic algorithm.  Could be rewritten to be linear.
2285    In practice, this is not a problem, because this function is seldom called,
2286    and uses a negligible amount of CPU time on average.  */
2287
2288 int
2289 back_branch_in_range_p (loop, insn)
2290      const struct loop *loop;
2291      rtx insn;
2292 {
2293   rtx p, q, target_insn;
2294   rtx loop_start = loop->start;
2295   rtx loop_end = loop->end;
2296   rtx orig_loop_end = loop->end;
2297
2298   /* Stop before we get to the backward branch at the end of the loop.  */
2299   loop_end = prev_nonnote_insn (loop_end);
2300   if (GET_CODE (loop_end) == BARRIER)
2301     loop_end = PREV_INSN (loop_end);
2302
2303   /* Check in case insn has been deleted, search forward for first non
2304      deleted insn following it.  */
2305   while (INSN_DELETED_P (insn))
2306     insn = NEXT_INSN (insn);
2307
2308   /* Check for the case where insn is the last insn in the loop.  Deal
2309      with the case where INSN was a deleted loop test insn, in which case
2310      it will now be the NOTE_LOOP_END.  */
2311   if (insn == loop_end || insn == orig_loop_end)
2312     return 0;
2313
2314   for (p = NEXT_INSN (insn); p != loop_end; p = NEXT_INSN (p))
2315     {
2316       if (GET_CODE (p) == JUMP_INSN)
2317         {
2318           target_insn = JUMP_LABEL (p);
2319
2320           /* Search from loop_start to insn, to see if one of them is
2321              the target_insn.  We can't use INSN_LUID comparisons here,
2322              since insn may not have an LUID entry.  */
2323           for (q = loop_start; q != insn; q = NEXT_INSN (q))
2324             if (q == target_insn)
2325               return 1;
2326         }
2327     }
2328
2329   return 0;
2330 }
2331
2332 /* Try to generate the simplest rtx for the expression
2333    (PLUS (MULT mult1 mult2) add1).  This is used to calculate the initial
2334    value of giv's.  */
2335
2336 static rtx
2337 fold_rtx_mult_add (mult1, mult2, add1, mode)
2338      rtx mult1, mult2, add1;
2339      enum machine_mode mode;
2340 {
2341   rtx temp, mult_res;
2342   rtx result;
2343
2344   /* The modes must all be the same.  This should always be true.  For now,
2345      check to make sure.  */
2346   if ((GET_MODE (mult1) != mode && GET_MODE (mult1) != VOIDmode)
2347       || (GET_MODE (mult2) != mode && GET_MODE (mult2) != VOIDmode)
2348       || (GET_MODE (add1) != mode && GET_MODE (add1) != VOIDmode))
2349     abort ();
2350
2351   /* Ensure that if at least one of mult1/mult2 are constant, then mult2
2352      will be a constant.  */
2353   if (GET_CODE (mult1) == CONST_INT)
2354     {
2355       temp = mult2;
2356       mult2 = mult1;
2357       mult1 = temp;
2358     }
2359
2360   mult_res = simplify_binary_operation (MULT, mode, mult1, mult2);
2361   if (! mult_res)
2362     mult_res = gen_rtx_MULT (mode, mult1, mult2);
2363
2364   /* Again, put the constant second.  */
2365   if (GET_CODE (add1) == CONST_INT)
2366     {
2367       temp = add1;
2368       add1 = mult_res;
2369       mult_res = temp;
2370     }
2371
2372   result = simplify_binary_operation (PLUS, mode, add1, mult_res);
2373   if (! result)
2374     result = gen_rtx_PLUS (mode, add1, mult_res);
2375
2376   return result;
2377 }
2378
2379 /* Searches the list of induction struct's for the biv BL, to try to calculate
2380    the total increment value for one iteration of the loop as a constant.
2381
2382    Returns the increment value as an rtx, simplified as much as possible,
2383    if it can be calculated.  Otherwise, returns 0.  */
2384
2385 rtx
2386 biv_total_increment (bl)
2387      const struct iv_class *bl;
2388 {
2389   struct induction *v;
2390   rtx result;
2391
2392   /* For increment, must check every instruction that sets it.  Each
2393      instruction must be executed only once each time through the loop.
2394      To verify this, we check that the insn is always executed, and that
2395      there are no backward branches after the insn that branch to before it.
2396      Also, the insn must have a mult_val of one (to make sure it really is
2397      an increment).  */
2398
2399   result = const0_rtx;
2400   for (v = bl->biv; v; v = v->next_iv)
2401     {
2402       if (v->always_computable && v->mult_val == const1_rtx
2403           && ! v->maybe_multiple)
2404         result = fold_rtx_mult_add (result, const1_rtx, v->add_val, v->mode);
2405       else
2406         return 0;
2407     }
2408
2409   return result;
2410 }
2411
2412 /* For each biv and giv, determine whether it can be safely split into
2413    a different variable for each unrolled copy of the loop body.  If it
2414    is safe to split, then indicate that by saving some useful info
2415    in the splittable_regs array.
2416
2417    If the loop is being completely unrolled, then splittable_regs will hold
2418    the current value of the induction variable while the loop is unrolled.
2419    It must be set to the initial value of the induction variable here.
2420    Otherwise, splittable_regs will hold the difference between the current
2421    value of the induction variable and the value the induction variable had
2422    at the top of the loop.  It must be set to the value 0 here.
2423
2424    Returns the total number of instructions that set registers that are
2425    splittable.  */
2426
2427 /* ?? If the loop is only unrolled twice, then most of the restrictions to
2428    constant values are unnecessary, since we can easily calculate increment
2429    values in this case even if nothing is constant.  The increment value
2430    should not involve a multiply however.  */
2431
2432 /* ?? Even if the biv/giv increment values aren't constant, it may still
2433    be beneficial to split the variable if the loop is only unrolled a few
2434    times, since multiplies by small integers (1,2,3,4) are very cheap.  */
2435
2436 static int
2437 find_splittable_regs (loop, unroll_type, unroll_number)
2438      const struct loop *loop;
2439      enum unroll_types unroll_type;
2440      int unroll_number;
2441 {
2442   struct loop_ivs *ivs = LOOP_IVS (loop);
2443   struct iv_class *bl;
2444   struct induction *v;
2445   rtx increment, tem;
2446   rtx biv_final_value;
2447   int biv_splittable;
2448   int result = 0;
2449
2450   for (bl = ivs->list; bl; bl = bl->next)
2451     {
2452       /* Biv_total_increment must return a constant value,
2453          otherwise we can not calculate the split values.  */
2454
2455       increment = biv_total_increment (bl);
2456       if (! increment || GET_CODE (increment) != CONST_INT)
2457         continue;
2458
2459       /* The loop must be unrolled completely, or else have a known number
2460          of iterations and only one exit, or else the biv must be dead
2461          outside the loop, or else the final value must be known.  Otherwise,
2462          it is unsafe to split the biv since it may not have the proper
2463          value on loop exit.  */
2464
2465       /* loop_number_exit_count is non-zero if the loop has an exit other than
2466          a fall through at the end.  */
2467
2468       biv_splittable = 1;
2469       biv_final_value = 0;
2470       if (unroll_type != UNROLL_COMPLETELY
2471           && (loop->exit_count || unroll_type == UNROLL_NAIVE)
2472           && (REGNO_LAST_LUID (bl->regno) >= INSN_LUID (loop->end)
2473               || ! bl->init_insn
2474               || INSN_UID (bl->init_insn) >= max_uid_for_loop
2475               || (REGNO_FIRST_LUID (bl->regno)
2476                   < INSN_LUID (bl->init_insn))
2477               || reg_mentioned_p (bl->biv->dest_reg, SET_SRC (bl->init_set)))
2478           && ! (biv_final_value = final_biv_value (loop, bl)))
2479         biv_splittable = 0;
2480
2481       /* If any of the insns setting the BIV don't do so with a simple
2482          PLUS, we don't know how to split it.  */
2483       for (v = bl->biv; biv_splittable && v; v = v->next_iv)
2484         if ((tem = single_set (v->insn)) == 0
2485             || GET_CODE (SET_DEST (tem)) != REG
2486             || REGNO (SET_DEST (tem)) != bl->regno
2487             || GET_CODE (SET_SRC (tem)) != PLUS)
2488           biv_splittable = 0;
2489
2490       /* If final value is non-zero, then must emit an instruction which sets
2491          the value of the biv to the proper value.  This is done after
2492          handling all of the givs, since some of them may need to use the
2493          biv's value in their initialization code.  */
2494
2495       /* This biv is splittable.  If completely unrolling the loop, save
2496          the biv's initial value.  Otherwise, save the constant zero.  */
2497
2498       if (biv_splittable == 1)
2499         {
2500           if (unroll_type == UNROLL_COMPLETELY)
2501             {
2502               /* If the initial value of the biv is itself (i.e. it is too
2503                  complicated for strength_reduce to compute), or is a hard
2504                  register, or it isn't invariant, then we must create a new
2505                  pseudo reg to hold the initial value of the biv.  */
2506
2507               if (GET_CODE (bl->initial_value) == REG
2508                   && (REGNO (bl->initial_value) == bl->regno
2509                       || REGNO (bl->initial_value) < FIRST_PSEUDO_REGISTER
2510                       || ! loop_invariant_p (loop, bl->initial_value)))
2511                 {
2512                   rtx tem = gen_reg_rtx (bl->biv->mode);
2513
2514                   record_base_value (REGNO (tem), bl->biv->add_val, 0);
2515                   loop_insn_hoist (loop, 
2516                                    gen_move_insn (tem, bl->biv->src_reg));
2517
2518                   if (loop_dump_stream)
2519                     fprintf (loop_dump_stream,
2520                              "Biv %d initial value remapped to %d.\n",
2521                              bl->regno, REGNO (tem));
2522
2523                   splittable_regs[bl->regno] = tem;
2524                 }
2525               else
2526                 splittable_regs[bl->regno] = bl->initial_value;
2527             }
2528           else
2529             splittable_regs[bl->regno] = const0_rtx;
2530
2531           /* Save the number of instructions that modify the biv, so that
2532              we can treat the last one specially.  */
2533
2534           splittable_regs_updates[bl->regno] = bl->biv_count;
2535           result += bl->biv_count;
2536
2537           if (loop_dump_stream)
2538             fprintf (loop_dump_stream,
2539                      "Biv %d safe to split.\n", bl->regno);
2540         }
2541
2542       /* Check every giv that depends on this biv to see whether it is
2543          splittable also.  Even if the biv isn't splittable, givs which
2544          depend on it may be splittable if the biv is live outside the
2545          loop, and the givs aren't.  */
2546
2547       result += find_splittable_givs (loop, bl, unroll_type, increment,
2548                                       unroll_number);
2549
2550       /* If final value is non-zero, then must emit an instruction which sets
2551          the value of the biv to the proper value.  This is done after
2552          handling all of the givs, since some of them may need to use the
2553          biv's value in their initialization code.  */
2554       if (biv_final_value)
2555         {
2556           /* If the loop has multiple exits, emit the insns before the
2557              loop to ensure that it will always be executed no matter
2558              how the loop exits.  Otherwise emit the insn after the loop,
2559              since this is slightly more efficient.  */
2560           if (! loop->exit_count)
2561             loop_insn_sink (loop, gen_move_insn (bl->biv->src_reg,
2562                                                  biv_final_value));
2563           else
2564             {
2565               /* Create a new register to hold the value of the biv, and then
2566                  set the biv to its final value before the loop start.  The biv
2567                  is set to its final value before loop start to ensure that
2568                  this insn will always be executed, no matter how the loop
2569                  exits.  */
2570               rtx tem = gen_reg_rtx (bl->biv->mode);
2571               record_base_value (REGNO (tem), bl->biv->add_val, 0);
2572
2573               loop_insn_hoist (loop, gen_move_insn (tem, bl->biv->src_reg));
2574               loop_insn_hoist (loop, gen_move_insn (bl->biv->src_reg,
2575                                                     biv_final_value));
2576
2577               if (loop_dump_stream)
2578                 fprintf (loop_dump_stream, "Biv %d mapped to %d for split.\n",
2579                          REGNO (bl->biv->src_reg), REGNO (tem));
2580
2581               /* Set up the mapping from the original biv register to the new
2582                  register.  */
2583               bl->biv->src_reg = tem;
2584             }
2585         }
2586     }
2587   return result;
2588 }
2589
2590 /* Return 1 if the first and last unrolled copy of the address giv V is valid
2591    for the instruction that is using it.  Do not make any changes to that
2592    instruction.  */
2593
2594 static int
2595 verify_addresses (v, giv_inc, unroll_number)
2596      struct induction *v;
2597      rtx giv_inc;
2598      int unroll_number;
2599 {
2600   int ret = 1;
2601   rtx orig_addr = *v->location;
2602   rtx last_addr = plus_constant (v->dest_reg,
2603                                  INTVAL (giv_inc) * (unroll_number - 1));
2604
2605   /* First check to see if either address would fail.   Handle the fact
2606      that we have may have a match_dup.  */
2607   if (! validate_replace_rtx (*v->location, v->dest_reg, v->insn)
2608       || ! validate_replace_rtx (*v->location, last_addr, v->insn))
2609     ret = 0;
2610
2611   /* Now put things back the way they were before.  This should always
2612    succeed.  */
2613   if (! validate_replace_rtx (*v->location, orig_addr, v->insn))
2614     abort ();
2615
2616   return ret;
2617 }
2618
2619 /* For every giv based on the biv BL, check to determine whether it is
2620    splittable.  This is a subroutine to find_splittable_regs ().
2621
2622    Return the number of instructions that set splittable registers.  */
2623
2624 static int
2625 find_splittable_givs (loop, bl, unroll_type, increment, unroll_number)
2626      const struct loop *loop;
2627      struct iv_class *bl;
2628      enum unroll_types unroll_type;
2629      rtx increment;
2630      int unroll_number;
2631 {
2632   struct loop_ivs *ivs = LOOP_IVS (loop);
2633   struct induction *v, *v2;
2634   rtx final_value;
2635   rtx tem;
2636   int result = 0;
2637
2638   /* Scan the list of givs, and set the same_insn field when there are
2639      multiple identical givs in the same insn.  */
2640   for (v = bl->giv; v; v = v->next_iv)
2641     for (v2 = v->next_iv; v2; v2 = v2->next_iv)
2642       if (v->insn == v2->insn && rtx_equal_p (v->new_reg, v2->new_reg)
2643           && ! v2->same_insn)
2644         v2->same_insn = v;
2645
2646   for (v = bl->giv; v; v = v->next_iv)
2647     {
2648       rtx giv_inc, value;
2649
2650       /* Only split the giv if it has already been reduced, or if the loop is
2651          being completely unrolled.  */
2652       if (unroll_type != UNROLL_COMPLETELY && v->ignore)
2653         continue;
2654
2655       /* The giv can be split if the insn that sets the giv is executed once
2656          and only once on every iteration of the loop.  */
2657       /* An address giv can always be split.  v->insn is just a use not a set,
2658          and hence it does not matter whether it is always executed.  All that
2659          matters is that all the biv increments are always executed, and we
2660          won't reach here if they aren't.  */
2661       if (v->giv_type != DEST_ADDR
2662           && (! v->always_computable
2663               || back_branch_in_range_p (loop, v->insn)))
2664         continue;
2665
2666       /* The giv increment value must be a constant.  */
2667       giv_inc = fold_rtx_mult_add (v->mult_val, increment, const0_rtx,
2668                                    v->mode);
2669       if (! giv_inc || GET_CODE (giv_inc) != CONST_INT)
2670         continue;
2671
2672       /* The loop must be unrolled completely, or else have a known number of
2673          iterations and only one exit, or else the giv must be dead outside
2674          the loop, or else the final value of the giv must be known.
2675          Otherwise, it is not safe to split the giv since it may not have the
2676          proper value on loop exit.  */
2677
2678       /* The used outside loop test will fail for DEST_ADDR givs.  They are
2679          never used outside the loop anyways, so it is always safe to split a
2680          DEST_ADDR giv.  */
2681
2682       final_value = 0;
2683       if (unroll_type != UNROLL_COMPLETELY
2684           && (loop->exit_count || unroll_type == UNROLL_NAIVE)
2685           && v->giv_type != DEST_ADDR
2686           /* The next part is true if the pseudo is used outside the loop.
2687              We assume that this is true for any pseudo created after loop
2688              starts, because we don't have a reg_n_info entry for them.  */
2689           && (REGNO (v->dest_reg) >= max_reg_before_loop
2690               || (REGNO_FIRST_UID (REGNO (v->dest_reg)) != INSN_UID (v->insn)
2691                   /* Check for the case where the pseudo is set by a shift/add
2692                      sequence, in which case the first insn setting the pseudo
2693                      is the first insn of the shift/add sequence.  */
2694                   && (! (tem = find_reg_note (v->insn, REG_RETVAL, NULL_RTX))
2695                       || (REGNO_FIRST_UID (REGNO (v->dest_reg))
2696                           != INSN_UID (XEXP (tem, 0)))))
2697               /* Line above always fails if INSN was moved by loop opt.  */
2698               || (REGNO_LAST_LUID (REGNO (v->dest_reg))
2699                   >= INSN_LUID (loop->end)))
2700           && ! (final_value = v->final_value))
2701         continue;
2702
2703 #if 0
2704       /* Currently, non-reduced/final-value givs are never split.  */
2705       /* Should emit insns after the loop if possible, as the biv final value
2706          code below does.  */
2707
2708       /* If the final value is non-zero, and the giv has not been reduced,
2709          then must emit an instruction to set the final value.  */
2710       if (final_value && !v->new_reg)
2711         {
2712           /* Create a new register to hold the value of the giv, and then set
2713              the giv to its final value before the loop start.  The giv is set
2714              to its final value before loop start to ensure that this insn
2715              will always be executed, no matter how we exit.  */
2716           tem = gen_reg_rtx (v->mode);
2717           loop_insn_hoist (loop, gen_move_insn (tem, v->dest_reg));
2718           loop_insn_hoist (loop, gen_move_insn (v->dest_reg, final_value));
2719
2720           if (loop_dump_stream)
2721             fprintf (loop_dump_stream, "Giv %d mapped to %d for split.\n",
2722                      REGNO (v->dest_reg), REGNO (tem));
2723
2724           v->src_reg = tem;
2725         }
2726 #endif
2727
2728       /* This giv is splittable.  If completely unrolling the loop, save the
2729          giv's initial value.  Otherwise, save the constant zero for it.  */
2730
2731       if (unroll_type == UNROLL_COMPLETELY)
2732         {
2733           /* It is not safe to use bl->initial_value here, because it may not
2734              be invariant.  It is safe to use the initial value stored in
2735              the splittable_regs array if it is set.  In rare cases, it won't
2736              be set, so then we do exactly the same thing as
2737              find_splittable_regs does to get a safe value.  */
2738           rtx biv_initial_value;
2739
2740           if (splittable_regs[bl->regno])
2741             biv_initial_value = splittable_regs[bl->regno];
2742           else if (GET_CODE (bl->initial_value) != REG
2743                    || (REGNO (bl->initial_value) != bl->regno
2744                        && REGNO (bl->initial_value) >= FIRST_PSEUDO_REGISTER))
2745             biv_initial_value = bl->initial_value;
2746           else
2747             {
2748               rtx tem = gen_reg_rtx (bl->biv->mode);
2749
2750               record_base_value (REGNO (tem), bl->biv->add_val, 0);
2751               loop_insn_hoist (loop, gen_move_insn (tem, bl->biv->src_reg));
2752               biv_initial_value = tem;
2753             }
2754           biv_initial_value = extend_value_for_giv (v, biv_initial_value);
2755           value = fold_rtx_mult_add (v->mult_val, biv_initial_value,
2756                                      v->add_val, v->mode);
2757         }
2758       else
2759         value = const0_rtx;
2760
2761       if (v->new_reg)
2762         {
2763           /* If a giv was combined with another giv, then we can only split
2764              this giv if the giv it was combined with was reduced.  This
2765              is because the value of v->new_reg is meaningless in this
2766              case.  */
2767           if (v->same && ! v->same->new_reg)
2768             {
2769               if (loop_dump_stream)
2770                 fprintf (loop_dump_stream,
2771                          "giv combined with unreduced giv not split.\n");
2772               continue;
2773             }
2774           /* If the giv is an address destination, it could be something other
2775              than a simple register, these have to be treated differently.  */
2776           else if (v->giv_type == DEST_REG)
2777             {
2778               /* If value is not a constant, register, or register plus
2779                  constant, then compute its value into a register before
2780                  loop start.  This prevents invalid rtx sharing, and should
2781                  generate better code.  We can use bl->initial_value here
2782                  instead of splittable_regs[bl->regno] because this code
2783                  is going before the loop start.  */
2784               if (unroll_type == UNROLL_COMPLETELY
2785                   && GET_CODE (value) != CONST_INT
2786                   && GET_CODE (value) != REG
2787                   && (GET_CODE (value) != PLUS
2788                       || GET_CODE (XEXP (value, 0)) != REG
2789                       || GET_CODE (XEXP (value, 1)) != CONST_INT))
2790                 {
2791                   rtx tem = gen_reg_rtx (v->mode);
2792                   record_base_value (REGNO (tem), v->add_val, 0);
2793                   loop_iv_add_mult_hoist (loop, bl->initial_value, v->mult_val,
2794                                           v->add_val, tem);
2795                   value = tem;
2796                 }
2797
2798               splittable_regs[REGNO (v->new_reg)] = value;
2799             }
2800           else
2801             {
2802               /* Splitting address givs is useful since it will often allow us
2803                  to eliminate some increment insns for the base giv as
2804                  unnecessary.  */
2805
2806               /* If the addr giv is combined with a dest_reg giv, then all
2807                  references to that dest reg will be remapped, which is NOT
2808                  what we want for split addr regs. We always create a new
2809                  register for the split addr giv, just to be safe.  */
2810
2811               /* If we have multiple identical address givs within a
2812                  single instruction, then use a single pseudo reg for
2813                  both.  This is necessary in case one is a match_dup
2814                  of the other.  */
2815
2816               v->const_adjust = 0;
2817
2818               if (v->same_insn)
2819                 {
2820                   v->dest_reg = v->same_insn->dest_reg;
2821                   if (loop_dump_stream)
2822                     fprintf (loop_dump_stream,
2823                              "Sharing address givs in insn %d\n",
2824                              INSN_UID (v->insn));
2825                 }
2826               /* If multiple address GIVs have been combined with the
2827                  same dest_reg GIV, do not create a new register for
2828                  each.  */
2829               else if (unroll_type != UNROLL_COMPLETELY
2830                        && v->giv_type == DEST_ADDR
2831                        && v->same && v->same->giv_type == DEST_ADDR
2832                        && v->same->unrolled
2833                        /* combine_givs_p may return true for some cases
2834                           where the add and mult values are not equal.
2835                           To share a register here, the values must be
2836                           equal.  */
2837                        && rtx_equal_p (v->same->mult_val, v->mult_val)
2838                        && rtx_equal_p (v->same->add_val, v->add_val)
2839                        /* If the memory references have different modes,
2840                           then the address may not be valid and we must
2841                           not share registers.  */
2842                        && verify_addresses (v, giv_inc, unroll_number))
2843                 {
2844                   v->dest_reg = v->same->dest_reg;
2845                   v->shared = 1;
2846                 }
2847               else if (unroll_type != UNROLL_COMPLETELY)
2848                 {
2849                   /* If not completely unrolling the loop, then create a new
2850                      register to hold the split value of the DEST_ADDR giv.
2851                      Emit insn to initialize its value before loop start.  */
2852
2853                   rtx tem = gen_reg_rtx (v->mode);
2854                   struct induction *same = v->same;
2855                   rtx new_reg = v->new_reg;
2856                   record_base_value (REGNO (tem), v->add_val, 0);
2857
2858                   /* If the address giv has a constant in its new_reg value,
2859                      then this constant can be pulled out and put in value,
2860                      instead of being part of the initialization code.  */
2861
2862                   if (GET_CODE (new_reg) == PLUS
2863                       && GET_CODE (XEXP (new_reg, 1)) == CONST_INT)
2864                     {
2865                       v->dest_reg
2866                         = plus_constant (tem, INTVAL (XEXP (new_reg, 1)));
2867
2868                       /* Only succeed if this will give valid addresses.
2869                          Try to validate both the first and the last
2870                          address resulting from loop unrolling, if
2871                          one fails, then can't do const elim here.  */
2872                       if (verify_addresses (v, giv_inc, unroll_number))
2873                         {
2874                           /* Save the negative of the eliminated const, so
2875                              that we can calculate the dest_reg's increment
2876                              value later.  */
2877                           v->const_adjust = -INTVAL (XEXP (new_reg, 1));
2878
2879                           new_reg = XEXP (new_reg, 0);
2880                           if (loop_dump_stream)
2881                             fprintf (loop_dump_stream,
2882                                      "Eliminating constant from giv %d\n",
2883                                      REGNO (tem));
2884                         }
2885                       else
2886                         v->dest_reg = tem;
2887                     }
2888                   else
2889                     v->dest_reg = tem;
2890
2891                   /* If the address hasn't been checked for validity yet, do so
2892                      now, and fail completely if either the first or the last
2893                      unrolled copy of the address is not a valid address
2894                      for the instruction that uses it.  */
2895                   if (v->dest_reg == tem
2896                       && ! verify_addresses (v, giv_inc, unroll_number))
2897                     {
2898                       for (v2 = v->next_iv; v2; v2 = v2->next_iv)
2899                         if (v2->same_insn == v)
2900                           v2->same_insn = 0;
2901
2902                       if (loop_dump_stream)
2903                         fprintf (loop_dump_stream,
2904                                  "Invalid address for giv at insn %d\n",
2905                                  INSN_UID (v->insn));
2906                       continue;
2907                     }
2908
2909                   v->new_reg = new_reg;
2910                   v->same = same;
2911
2912                   /* We set this after the address check, to guarantee that
2913                      the register will be initialized.  */
2914                   v->unrolled = 1;
2915
2916                   /* To initialize the new register, just move the value of
2917                      new_reg into it.  This is not guaranteed to give a valid
2918                      instruction on machines with complex addressing modes.
2919                      If we can't recognize it, then delete it and emit insns
2920                      to calculate the value from scratch.  */
2921                   loop_insn_hoist (loop, gen_rtx_SET (VOIDmode, tem,
2922                                                       copy_rtx (v->new_reg)));
2923                   if (recog_memoized (PREV_INSN (loop->start)) < 0)
2924                     {
2925                       rtx sequence, ret;
2926
2927                       /* We can't use bl->initial_value to compute the initial
2928                          value, because the loop may have been preconditioned.
2929                          We must calculate it from NEW_REG.  */
2930                       delete_insn (PREV_INSN (loop->start));
2931
2932                       start_sequence ();
2933                       ret = force_operand (v->new_reg, tem);
2934                       if (ret != tem)
2935                         emit_move_insn (tem, ret);
2936                       sequence = gen_sequence ();
2937                       end_sequence ();
2938                       loop_insn_hoist (loop, sequence);
2939
2940                       if (loop_dump_stream)
2941                         fprintf (loop_dump_stream,
2942                                  "Invalid init insn, rewritten.\n");
2943                     }
2944                 }
2945               else
2946                 {
2947                   v->dest_reg = value;
2948
2949                   /* Check the resulting address for validity, and fail
2950                      if the resulting address would be invalid.  */
2951                   if (! verify_addresses (v, giv_inc, unroll_number))
2952                     {
2953                       for (v2 = v->next_iv; v2; v2 = v2->next_iv)
2954                         if (v2->same_insn == v)
2955                           v2->same_insn = 0;
2956
2957                       if (loop_dump_stream)
2958                         fprintf (loop_dump_stream,
2959                                  "Invalid address for giv at insn %d\n",
2960                                  INSN_UID (v->insn));
2961                       continue;
2962                     }
2963                 }
2964
2965               /* Store the value of dest_reg into the insn.  This sharing
2966                  will not be a problem as this insn will always be copied
2967                  later.  */
2968
2969               *v->location = v->dest_reg;
2970
2971               /* If this address giv is combined with a dest reg giv, then
2972                  save the base giv's induction pointer so that we will be
2973                  able to handle this address giv properly.  The base giv
2974                  itself does not have to be splittable.  */
2975
2976               if (v->same && v->same->giv_type == DEST_REG)
2977                 addr_combined_regs[REGNO (v->same->new_reg)] = v->same;
2978
2979               if (GET_CODE (v->new_reg) == REG)
2980                 {
2981                   /* This giv maybe hasn't been combined with any others.
2982                      Make sure that it's giv is marked as splittable here.  */
2983
2984                   splittable_regs[REGNO (v->new_reg)] = value;
2985
2986                   /* Make it appear to depend upon itself, so that the
2987                      giv will be properly split in the main loop above.  */
2988                   if (! v->same)
2989                     {
2990                       v->same = v;
2991                       addr_combined_regs[REGNO (v->new_reg)] = v;
2992                     }
2993                 }
2994
2995               if (loop_dump_stream)
2996                 fprintf (loop_dump_stream, "DEST_ADDR giv being split.\n");
2997             }
2998         }
2999       else
3000         {
3001 #if 0
3002           /* Currently, unreduced giv's can't be split.  This is not too much
3003              of a problem since unreduced giv's are not live across loop
3004              iterations anyways.  When unrolling a loop completely though,
3005              it makes sense to reduce&split givs when possible, as this will
3006              result in simpler instructions, and will not require that a reg
3007              be live across loop iterations.  */
3008
3009           splittable_regs[REGNO (v->dest_reg)] = value;
3010           fprintf (stderr, "Giv %d at insn %d not reduced\n",
3011                    REGNO (v->dest_reg), INSN_UID (v->insn));
3012 #else
3013           continue;
3014 #endif
3015         }
3016
3017       /* Unreduced givs are only updated once by definition.  Reduced givs
3018          are updated as many times as their biv is.  Mark it so if this is
3019          a splittable register.  Don't need to do anything for address givs
3020          where this may not be a register.  */
3021
3022       if (GET_CODE (v->new_reg) == REG)
3023         {
3024           int count = 1;
3025           if (! v->ignore)
3026             count = REG_IV_CLASS (ivs, REGNO (v->src_reg))->biv_count;
3027
3028           splittable_regs_updates[REGNO (v->new_reg)] = count;
3029         }
3030
3031       result++;
3032
3033       if (loop_dump_stream)
3034         {
3035           int regnum;
3036
3037           if (GET_CODE (v->dest_reg) == CONST_INT)
3038             regnum = -1;
3039           else if (GET_CODE (v->dest_reg) != REG)
3040             regnum = REGNO (XEXP (v->dest_reg, 0));
3041           else
3042             regnum = REGNO (v->dest_reg);
3043           fprintf (loop_dump_stream, "Giv %d at insn %d safe to split.\n",
3044                    regnum, INSN_UID (v->insn));
3045         }
3046     }
3047
3048   return result;
3049 }
3050 \f
3051 /* Try to prove that the register is dead after the loop exits.  Trace every
3052    loop exit looking for an insn that will always be executed, which sets
3053    the register to some value, and appears before the first use of the register
3054    is found.  If successful, then return 1, otherwise return 0.  */
3055
3056 /* ?? Could be made more intelligent in the handling of jumps, so that
3057    it can search past if statements and other similar structures.  */
3058
3059 static int
3060 reg_dead_after_loop (loop, reg)
3061      const struct loop *loop;
3062      rtx reg;
3063 {
3064   rtx insn, label;
3065   enum rtx_code code;
3066   int jump_count = 0;
3067   int label_count = 0;
3068
3069   /* In addition to checking all exits of this loop, we must also check
3070      all exits of inner nested loops that would exit this loop.  We don't
3071      have any way to identify those, so we just give up if there are any
3072      such inner loop exits.  */
3073
3074   for (label = loop->exit_labels; label; label = LABEL_NEXTREF (label))
3075     label_count++;
3076
3077   if (label_count != loop->exit_count)
3078     return 0;
3079
3080   /* HACK: Must also search the loop fall through exit, create a label_ref
3081      here which points to the loop->end, and append the loop_number_exit_labels
3082      list to it.  */
3083   label = gen_rtx_LABEL_REF (VOIDmode, loop->end);
3084   LABEL_NEXTREF (label) = loop->exit_labels;
3085
3086   for (; label; label = LABEL_NEXTREF (label))
3087     {
3088       /* Succeed if find an insn which sets the biv or if reach end of
3089          function.  Fail if find an insn that uses the biv, or if come to
3090          a conditional jump.  */
3091
3092       insn = NEXT_INSN (XEXP (label, 0));
3093       while (insn)
3094         {
3095           code = GET_CODE (insn);
3096           if (GET_RTX_CLASS (code) == 'i')
3097             {
3098               rtx set;
3099
3100               if (reg_referenced_p (reg, PATTERN (insn)))
3101                 return 0;
3102
3103               set = single_set (insn);
3104               if (set && rtx_equal_p (SET_DEST (set), reg))
3105                 break;
3106             }
3107
3108           if (code == JUMP_INSN)
3109             {
3110               if (GET_CODE (PATTERN (insn)) == RETURN)
3111                 break;
3112               else if (!any_uncondjump_p (insn)
3113                        /* Prevent infinite loop following infinite loops.  */
3114                        || jump_count++ > 20)
3115                 return 0;
3116               else
3117                 insn = JUMP_LABEL (insn);
3118             }
3119
3120           insn = NEXT_INSN (insn);
3121         }
3122     }
3123
3124   /* Success, the register is dead on all loop exits.  */
3125   return 1;
3126 }
3127
3128 /* Try to calculate the final value of the biv, the value it will have at
3129    the end of the loop.  If we can do it, return that value.  */
3130
3131 rtx
3132 final_biv_value (loop, bl)
3133      const struct loop *loop;
3134      struct iv_class *bl;
3135 {
3136   unsigned HOST_WIDE_INT n_iterations = LOOP_INFO (loop)->n_iterations;
3137   rtx increment, tem;
3138
3139   /* ??? This only works for MODE_INT biv's.  Reject all others for now.  */
3140
3141   if (GET_MODE_CLASS (bl->biv->mode) != MODE_INT)
3142     return 0;
3143
3144   /* The final value for reversed bivs must be calculated differently than
3145      for ordinary bivs.  In this case, there is already an insn after the
3146      loop which sets this biv's final value (if necessary), and there are
3147      no other loop exits, so we can return any value.  */
3148   if (bl->reversed)
3149     {
3150       if (loop_dump_stream)
3151         fprintf (loop_dump_stream,
3152                  "Final biv value for %d, reversed biv.\n", bl->regno);
3153
3154       return const0_rtx;
3155     }
3156
3157   /* Try to calculate the final value as initial value + (number of iterations
3158      * increment).  For this to work, increment must be invariant, the only
3159      exit from the loop must be the fall through at the bottom (otherwise
3160      it may not have its final value when the loop exits), and the initial
3161      value of the biv must be invariant.  */
3162
3163   if (n_iterations != 0
3164       && ! loop->exit_count
3165       && loop_invariant_p (loop, bl->initial_value))
3166     {
3167       increment = biv_total_increment (bl);
3168
3169       if (increment && loop_invariant_p (loop, increment))
3170         {
3171           /* Can calculate the loop exit value, emit insns after loop
3172              end to calculate this value into a temporary register in
3173              case it is needed later.  */
3174
3175           tem = gen_reg_rtx (bl->biv->mode);
3176           record_base_value (REGNO (tem), bl->biv->add_val, 0);
3177           loop_iv_add_mult_sink (loop, increment, GEN_INT (n_iterations),
3178                                  bl->initial_value, tem);
3179
3180           if (loop_dump_stream)
3181             fprintf (loop_dump_stream,
3182                      "Final biv value for %d, calculated.\n", bl->regno);
3183
3184           return tem;
3185         }
3186     }
3187
3188   /* Check to see if the biv is dead at all loop exits.  */
3189   if (reg_dead_after_loop (loop, bl->biv->src_reg))
3190     {
3191       if (loop_dump_stream)
3192         fprintf (loop_dump_stream,
3193                  "Final biv value for %d, biv dead after loop exit.\n",
3194                  bl->regno);
3195
3196       return const0_rtx;
3197     }
3198
3199   return 0;
3200 }
3201
3202 /* Try to calculate the final value of the giv, the value it will have at
3203    the end of the loop.  If we can do it, return that value.  */
3204
3205 rtx
3206 final_giv_value (loop, v)
3207      const struct loop *loop;
3208      struct induction *v;
3209 {
3210   struct loop_ivs *ivs = LOOP_IVS (loop);
3211   struct iv_class *bl;
3212   rtx insn;
3213   rtx increment, tem;
3214   rtx seq;
3215   rtx loop_end = loop->end;
3216   unsigned HOST_WIDE_INT n_iterations = LOOP_INFO (loop)->n_iterations;
3217
3218   bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
3219
3220   /* The final value for givs which depend on reversed bivs must be calculated
3221      differently than for ordinary givs.  In this case, there is already an
3222      insn after the loop which sets this giv's final value (if necessary),
3223      and there are no other loop exits, so we can return any value.  */
3224   if (bl->reversed)
3225     {
3226       if (loop_dump_stream)
3227         fprintf (loop_dump_stream,
3228                  "Final giv value for %d, depends on reversed biv\n",
3229                  REGNO (v->dest_reg));
3230       return const0_rtx;
3231     }
3232
3233   /* Try to calculate the final value as a function of the biv it depends
3234      upon.  The only exit from the loop must be the fall through at the bottom
3235      (otherwise it may not have its final value when the loop exits).  */
3236
3237   /* ??? Can calculate the final giv value by subtracting off the
3238      extra biv increments times the giv's mult_val.  The loop must have
3239      only one exit for this to work, but the loop iterations does not need
3240      to be known.  */
3241
3242   if (n_iterations != 0
3243       && ! loop->exit_count)
3244     {
3245       /* ?? It is tempting to use the biv's value here since these insns will
3246          be put after the loop, and hence the biv will have its final value
3247          then.  However, this fails if the biv is subsequently eliminated.
3248          Perhaps determine whether biv's are eliminable before trying to
3249          determine whether giv's are replaceable so that we can use the
3250          biv value here if it is not eliminable.  */
3251
3252       /* We are emitting code after the end of the loop, so we must make
3253          sure that bl->initial_value is still valid then.  It will still
3254          be valid if it is invariant.  */
3255
3256       increment = biv_total_increment (bl);
3257
3258       if (increment && loop_invariant_p (loop, increment)
3259           && loop_invariant_p (loop, bl->initial_value))
3260         {
3261           /* Can calculate the loop exit value of its biv as
3262              (n_iterations * increment) + initial_value */
3263
3264           /* The loop exit value of the giv is then
3265              (final_biv_value - extra increments) * mult_val + add_val.
3266              The extra increments are any increments to the biv which
3267              occur in the loop after the giv's value is calculated.
3268              We must search from the insn that sets the giv to the end
3269              of the loop to calculate this value.  */
3270
3271           /* Put the final biv value in tem.  */
3272           tem = gen_reg_rtx (v->mode);
3273           record_base_value (REGNO (tem), bl->biv->add_val, 0);
3274           loop_iv_add_mult_sink (loop, extend_value_for_giv (v, increment),
3275                                  GEN_INT (n_iterations),
3276                                  extend_value_for_giv (v, bl->initial_value),
3277                                  tem);
3278
3279           /* Subtract off extra increments as we find them.  */
3280           for (insn = NEXT_INSN (v->insn); insn != loop_end;
3281                insn = NEXT_INSN (insn))
3282             {
3283               struct induction *biv;
3284
3285               for (biv = bl->biv; biv; biv = biv->next_iv)
3286                 if (biv->insn == insn)
3287                   {
3288                     start_sequence ();
3289                     tem = expand_binop (GET_MODE (tem), sub_optab, tem,
3290                                         biv->add_val, NULL_RTX, 0,
3291                                         OPTAB_LIB_WIDEN);
3292                     seq = gen_sequence ();
3293                     end_sequence ();
3294                     loop_insn_sink (loop, seq);
3295                   }
3296             }
3297
3298           /* Now calculate the giv's final value.  */
3299           loop_iv_add_mult_sink (loop, tem, v->mult_val, v->add_val, tem);
3300
3301           if (loop_dump_stream)
3302             fprintf (loop_dump_stream,
3303                      "Final giv value for %d, calc from biv's value.\n",
3304                      REGNO (v->dest_reg));
3305
3306           return tem;
3307         }
3308     }
3309
3310   /* Replaceable giv's should never reach here.  */
3311   if (v->replaceable)
3312     abort ();
3313
3314   /* Check to see if the biv is dead at all loop exits.  */
3315   if (reg_dead_after_loop (loop, v->dest_reg))
3316     {
3317       if (loop_dump_stream)
3318         fprintf (loop_dump_stream,
3319                  "Final giv value for %d, giv dead after loop exit.\n",
3320                  REGNO (v->dest_reg));
3321
3322       return const0_rtx;
3323     }
3324
3325   return 0;
3326 }
3327
3328 /* Look back before LOOP->START for then insn that sets REG and return
3329    the equivalent constant if there is a REG_EQUAL note otherwise just
3330    the SET_SRC of REG.  */
3331
3332 static rtx
3333 loop_find_equiv_value (loop, reg)
3334      const struct loop *loop;
3335      rtx reg;
3336 {
3337   rtx loop_start = loop->start;
3338   rtx insn, set;
3339   rtx ret;
3340
3341   ret = reg;
3342   for (insn = PREV_INSN (loop_start); insn; insn = PREV_INSN (insn))
3343     {
3344       if (GET_CODE (insn) == CODE_LABEL)
3345         break;
3346
3347       else if (INSN_P (insn) && reg_set_p (reg, insn))
3348         {
3349           /* We found the last insn before the loop that sets the register.
3350              If it sets the entire register, and has a REG_EQUAL note,
3351              then use the value of the REG_EQUAL note.  */
3352           if ((set = single_set (insn))
3353               && (SET_DEST (set) == reg))
3354             {
3355               rtx note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
3356
3357               /* Only use the REG_EQUAL note if it is a constant.
3358                  Other things, divide in particular, will cause
3359                  problems later if we use them.  */
3360               if (note && GET_CODE (XEXP (note, 0)) != EXPR_LIST
3361                   && CONSTANT_P (XEXP (note, 0)))
3362                 ret = XEXP (note, 0);
3363               else
3364                 ret = SET_SRC (set);
3365
3366               /* We cannot do this if it changes between the
3367                  assignment and loop start though.  */
3368               if (modified_between_p (ret, insn, loop_start))
3369                 ret = reg;
3370             }
3371           break;
3372         }
3373     }
3374   return ret;
3375 }
3376
3377 /* Return a simplified rtx for the expression OP - REG.
3378
3379    REG must appear in OP, and OP must be a register or the sum of a register
3380    and a second term.
3381
3382    Thus, the return value must be const0_rtx or the second term.
3383
3384    The caller is responsible for verifying that REG appears in OP and OP has
3385    the proper form.  */
3386
3387 static rtx
3388 subtract_reg_term (op, reg)
3389      rtx op, reg;
3390 {
3391   if (op == reg)
3392     return const0_rtx;
3393   if (GET_CODE (op) == PLUS)
3394     {
3395       if (XEXP (op, 0) == reg)
3396         return XEXP (op, 1);
3397       else if (XEXP (op, 1) == reg)
3398         return XEXP (op, 0);
3399     }
3400   /* OP does not contain REG as a term.  */
3401   abort ();
3402 }
3403
3404 /* Find and return register term common to both expressions OP0 and
3405    OP1 or NULL_RTX if no such term exists.  Each expression must be a
3406    REG or a PLUS of a REG.  */
3407
3408 static rtx
3409 find_common_reg_term (op0, op1)
3410      rtx op0, op1;
3411 {
3412   if ((GET_CODE (op0) == REG || GET_CODE (op0) == PLUS)
3413       && (GET_CODE (op1) == REG || GET_CODE (op1) == PLUS))
3414     {
3415       rtx op00;
3416       rtx op01;
3417       rtx op10;
3418       rtx op11;
3419
3420       if (GET_CODE (op0) == PLUS)
3421         op01 = XEXP (op0, 1), op00 = XEXP (op0, 0);
3422       else
3423         op01 = const0_rtx, op00 = op0;
3424
3425       if (GET_CODE (op1) == PLUS)
3426         op11 = XEXP (op1, 1), op10 = XEXP (op1, 0);
3427       else
3428         op11 = const0_rtx, op10 = op1;
3429
3430       /* Find and return common register term if present.  */
3431       if (REG_P (op00) && (op00 == op10 || op00 == op11))
3432         return op00;
3433       else if (REG_P (op01) && (op01 == op10 || op01 == op11))
3434         return op01;
3435     }
3436
3437   /* No common register term found.  */
3438   return NULL_RTX;
3439 }
3440
3441 /* Determine the loop iterator and calculate the number of loop
3442    iterations.  Returns the exact number of loop iterations if it can
3443    be calculated, otherwise returns zero.  */
3444
3445 unsigned HOST_WIDE_INT
3446 loop_iterations (loop)
3447      struct loop *loop;
3448 {
3449   struct loop_info *loop_info = LOOP_INFO (loop);
3450   struct loop_ivs *ivs = LOOP_IVS (loop);
3451   rtx comparison, comparison_value;
3452   rtx iteration_var, initial_value, increment, final_value;
3453   enum rtx_code comparison_code;
3454   HOST_WIDE_INT abs_inc;
3455   unsigned HOST_WIDE_INT abs_diff;
3456   int off_by_one;
3457   int increment_dir;
3458   int unsigned_p, compare_dir, final_larger;
3459   rtx last_loop_insn;
3460   rtx reg_term;
3461   struct iv_class *bl;
3462
3463   loop_info->n_iterations = 0;
3464   loop_info->initial_value = 0;
3465   loop_info->initial_equiv_value = 0;
3466   loop_info->comparison_value = 0;
3467   loop_info->final_value = 0;
3468   loop_info->final_equiv_value = 0;
3469   loop_info->increment = 0;
3470   loop_info->iteration_var = 0;
3471   loop_info->unroll_number = 1;
3472   loop_info->iv = 0;
3473
3474   /* We used to use prev_nonnote_insn here, but that fails because it might
3475      accidentally get the branch for a contained loop if the branch for this
3476      loop was deleted.  We can only trust branches immediately before the
3477      loop_end.  */
3478   last_loop_insn = PREV_INSN (loop->end);
3479
3480   /* ??? We should probably try harder to find the jump insn
3481      at the end of the loop.  The following code assumes that
3482      the last loop insn is a jump to the top of the loop.  */
3483   if (GET_CODE (last_loop_insn) != JUMP_INSN)
3484     {
3485       if (loop_dump_stream)
3486         fprintf (loop_dump_stream,
3487                  "Loop iterations: No final conditional branch found.\n");
3488       return 0;
3489     }
3490
3491   /* If there is a more than a single jump to the top of the loop
3492      we cannot (easily) determine the iteration count.  */
3493   if (LABEL_NUSES (JUMP_LABEL (last_loop_insn)) > 1)
3494     {
3495       if (loop_dump_stream)
3496         fprintf (loop_dump_stream,
3497                  "Loop iterations: Loop has multiple back edges.\n");
3498       return 0;
3499     }
3500
3501   /* Find the iteration variable.  If the last insn is a conditional
3502      branch, and the insn before tests a register value, make that the
3503      iteration variable.  */
3504
3505   comparison = get_condition_for_loop (loop, last_loop_insn);
3506   if (comparison == 0)
3507     {
3508       if (loop_dump_stream)
3509         fprintf (loop_dump_stream,
3510                  "Loop iterations: No final comparison found.\n");
3511       return 0;
3512     }
3513
3514   /* ??? Get_condition may switch position of induction variable and
3515      invariant register when it canonicalizes the comparison.  */
3516
3517   comparison_code = GET_CODE (comparison);
3518   iteration_var = XEXP (comparison, 0);
3519   comparison_value = XEXP (comparison, 1);
3520
3521   if (GET_CODE (iteration_var) != REG)
3522     {
3523       if (loop_dump_stream)
3524         fprintf (loop_dump_stream,
3525                  "Loop iterations: Comparison not against register.\n");
3526       return 0;
3527     }
3528
3529   /* The only new registers that are created before loop iterations
3530      are givs made from biv increments or registers created by
3531      load_mems.  In the latter case, it is possible that try_copy_prop
3532      will propagate a new pseudo into the old iteration register but
3533      this will be marked by having the REG_USERVAR_P bit set.  */
3534
3535   if ((unsigned) REGNO (iteration_var) >= ivs->n_regs
3536       && ! REG_USERVAR_P (iteration_var))
3537     abort ();
3538
3539   /* Determine the initial value of the iteration variable, and the amount
3540      that it is incremented each loop.  Use the tables constructed by
3541      the strength reduction pass to calculate these values.  */
3542
3543   /* Clear the result values, in case no answer can be found.  */
3544   initial_value = 0;
3545   increment = 0;
3546
3547   /* The iteration variable can be either a giv or a biv.  Check to see
3548      which it is, and compute the variable's initial value, and increment
3549      value if possible.  */
3550
3551   /* If this is a new register, can't handle it since we don't have any
3552      reg_iv_type entry for it.  */
3553   if ((unsigned) REGNO (iteration_var) >= ivs->n_regs)
3554     {
3555       if (loop_dump_stream)
3556         fprintf (loop_dump_stream,
3557                  "Loop iterations: No reg_iv_type entry for iteration var.\n");
3558       return 0;
3559     }
3560
3561   /* Reject iteration variables larger than the host wide int size, since they
3562      could result in a number of iterations greater than the range of our
3563      `unsigned HOST_WIDE_INT' variable loop_info->n_iterations.  */
3564   else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var))
3565             > HOST_BITS_PER_WIDE_INT))
3566     {
3567       if (loop_dump_stream)
3568         fprintf (loop_dump_stream,
3569                  "Loop iterations: Iteration var rejected because mode too large.\n");
3570       return 0;
3571     }
3572   else if (GET_MODE_CLASS (GET_MODE (iteration_var)) != MODE_INT)
3573     {
3574       if (loop_dump_stream)
3575         fprintf (loop_dump_stream,
3576                  "Loop iterations: Iteration var not an integer.\n");
3577       return 0;
3578     }
3579   else if (REG_IV_TYPE (ivs, REGNO (iteration_var)) == BASIC_INDUCT)
3580     {
3581       if (REGNO (iteration_var) >= ivs->n_regs)
3582         abort ();
3583
3584       /* Grab initial value, only useful if it is a constant.  */
3585       bl = REG_IV_CLASS (ivs, REGNO (iteration_var));
3586       initial_value = bl->initial_value;
3587       if (!bl->biv->always_executed || bl->biv->maybe_multiple)
3588         {
3589           if (loop_dump_stream)
3590             fprintf (loop_dump_stream,
3591                      "Loop iterations: Basic induction var not set once in each iteration.\n");
3592           return 0;
3593         }
3594
3595       increment = biv_total_increment (bl);
3596     }
3597   else if (REG_IV_TYPE (ivs, REGNO (iteration_var)) == GENERAL_INDUCT)
3598     {
3599       HOST_WIDE_INT offset = 0;
3600       struct induction *v = REG_IV_INFO (ivs, REGNO (iteration_var));
3601       rtx biv_initial_value;
3602
3603       if (REGNO (v->src_reg) >= ivs->n_regs)
3604         abort ();
3605
3606       if (!v->always_executed || v->maybe_multiple)
3607         {
3608           if (loop_dump_stream)
3609             fprintf (loop_dump_stream,
3610                      "Loop iterations: General induction var not set once in each iteration.\n");
3611           return 0;
3612         }
3613
3614       bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
3615
3616       /* Increment value is mult_val times the increment value of the biv.  */
3617
3618       increment = biv_total_increment (bl);
3619       if (increment)
3620         {
3621           struct induction *biv_inc;
3622
3623           increment = fold_rtx_mult_add (v->mult_val,
3624                                          extend_value_for_giv (v, increment),
3625                                          const0_rtx, v->mode);
3626           /* The caller assumes that one full increment has occured at the
3627              first loop test.  But that's not true when the biv is incremented
3628              after the giv is set (which is the usual case), e.g.:
3629              i = 6; do {;} while (i++ < 9) .
3630              Therefore, we bias the initial value by subtracting the amount of
3631              the increment that occurs between the giv set and the giv test.  */
3632           for (biv_inc = bl->biv; biv_inc; biv_inc = biv_inc->next_iv)
3633             {
3634               if (loop_insn_first_p (v->insn, biv_inc->insn))
3635                 offset -= INTVAL (biv_inc->add_val);
3636             }
3637           offset *= INTVAL (v->mult_val);
3638         }
3639       if (loop_dump_stream)
3640         fprintf (loop_dump_stream,
3641                  "Loop iterations: Giv iterator, initial value bias %ld.\n",
3642                  (long) offset);
3643
3644       /* Initial value is mult_val times the biv's initial value plus
3645          add_val.  Only useful if it is a constant.  */
3646       biv_initial_value = extend_value_for_giv (v, bl->initial_value);
3647       initial_value
3648         = fold_rtx_mult_add (v->mult_val,
3649                              plus_constant (biv_initial_value, offset),
3650                              v->add_val, v->mode);
3651     }
3652   else
3653     {
3654       if (loop_dump_stream)
3655         fprintf (loop_dump_stream,
3656                  "Loop iterations: Not basic or general induction var.\n");
3657       return 0;
3658     }
3659
3660   if (initial_value == 0)
3661     return 0;
3662
3663   unsigned_p = 0;
3664   off_by_one = 0;
3665   switch (comparison_code)
3666     {
3667     case LEU:
3668       unsigned_p = 1;
3669     case LE:
3670       compare_dir = 1;
3671       off_by_one = 1;
3672       break;
3673     case GEU:
3674       unsigned_p = 1;
3675     case GE:
3676       compare_dir = -1;
3677       off_by_one = -1;
3678       break;
3679     case EQ:
3680       /* Cannot determine loop iterations with this case.  */
3681       compare_dir = 0;
3682       break;
3683     case LTU:
3684       unsigned_p = 1;
3685     case LT:
3686       compare_dir = 1;
3687       break;
3688     case GTU:
3689       unsigned_p = 1;
3690     case GT:
3691       compare_dir = -1;
3692     case NE:
3693       compare_dir = 0;
3694       break;
3695     default:
3696       abort ();
3697     }
3698
3699   /* If the comparison value is an invariant register, then try to find
3700      its value from the insns before the start of the loop.  */
3701
3702   final_value = comparison_value;
3703   if (GET_CODE (comparison_value) == REG
3704       && loop_invariant_p (loop, comparison_value))
3705     {
3706       final_value = loop_find_equiv_value (loop, comparison_value);
3707
3708       /* If we don't get an invariant final value, we are better
3709          off with the original register.  */
3710       if (! loop_invariant_p (loop, final_value))
3711         final_value = comparison_value;
3712     }
3713
3714   /* Calculate the approximate final value of the induction variable
3715      (on the last successful iteration).  The exact final value
3716      depends on the branch operator, and increment sign.  It will be
3717      wrong if the iteration variable is not incremented by one each
3718      time through the loop and (comparison_value + off_by_one -
3719      initial_value) % increment != 0.
3720      ??? Note that the final_value may overflow and thus final_larger
3721      will be bogus.  A potentially infinite loop will be classified
3722      as immediate, e.g. for (i = 0x7ffffff0; i <= 0x7fffffff; i++)  */
3723   if (off_by_one)
3724     final_value = plus_constant (final_value, off_by_one);
3725
3726   /* Save the calculated values describing this loop's bounds, in case
3727      precondition_loop_p will need them later.  These values can not be
3728      recalculated inside precondition_loop_p because strength reduction
3729      optimizations may obscure the loop's structure.
3730
3731      These values are only required by precondition_loop_p and insert_bct
3732      whenever the number of iterations cannot be computed at compile time.
3733      Only the difference between final_value and initial_value is
3734      important.  Note that final_value is only approximate.  */
3735   loop_info->initial_value = initial_value;
3736   loop_info->comparison_value = comparison_value;
3737   loop_info->final_value = plus_constant (comparison_value, off_by_one);
3738   loop_info->increment = increment;
3739   loop_info->iteration_var = iteration_var;
3740   loop_info->comparison_code = comparison_code;
3741   loop_info->iv = bl;
3742
3743   /* Try to determine the iteration count for loops such
3744      as (for i = init; i < init + const; i++).  When running the
3745      loop optimization twice, the first pass often converts simple
3746      loops into this form.  */
3747
3748   if (REG_P (initial_value))
3749     {
3750       rtx reg1;
3751       rtx reg2;
3752       rtx const2;
3753
3754       reg1 = initial_value;
3755       if (GET_CODE (final_value) == PLUS)
3756         reg2 = XEXP (final_value, 0), const2 = XEXP (final_value, 1);
3757       else
3758         reg2 = final_value, const2 = const0_rtx;
3759
3760       /* Check for initial_value = reg1, final_value = reg2 + const2,
3761          where reg1 != reg2.  */
3762       if (REG_P (reg2) && reg2 != reg1)
3763         {
3764           rtx temp;
3765
3766           /* Find what reg1 is equivalent to.  Hopefully it will
3767              either be reg2 or reg2 plus a constant.  */
3768           temp = loop_find_equiv_value (loop, reg1);
3769
3770           if (find_common_reg_term (temp, reg2))
3771             initial_value = temp;
3772           else
3773             {
3774               /* Find what reg2 is equivalent to.  Hopefully it will
3775                  either be reg1 or reg1 plus a constant.  Let's ignore
3776                  the latter case for now since it is not so common.  */
3777               temp = loop_find_equiv_value (loop, reg2);
3778
3779               if (temp == loop_info->iteration_var)
3780                 temp = initial_value;
3781               if (temp == reg1)
3782                 final_value = (const2 == const0_rtx)
3783                   ? reg1 : gen_rtx_PLUS (GET_MODE (reg1), reg1, const2);
3784             }
3785         }
3786       else if (loop->vtop && GET_CODE (reg2) == CONST_INT)
3787         {
3788           rtx temp;
3789
3790           /* When running the loop optimizer twice, check_dbra_loop
3791              further obfuscates reversible loops of the form:
3792              for (i = init; i < init + const; i++).  We often end up with
3793              final_value = 0, initial_value = temp, temp = temp2 - init,
3794              where temp2 = init + const.  If the loop has a vtop we
3795              can replace initial_value with const.  */
3796
3797           temp = loop_find_equiv_value (loop, reg1);
3798
3799           if (GET_CODE (temp) == MINUS && REG_P (XEXP (temp, 0)))
3800             {
3801               rtx temp2 = loop_find_equiv_value (loop, XEXP (temp, 0));
3802
3803               if (GET_CODE (temp2) == PLUS
3804                   && XEXP (temp2, 0) == XEXP (temp, 1))
3805                 initial_value = XEXP (temp2, 1);
3806             }
3807         }
3808     }
3809
3810   /* If have initial_value = reg + const1 and final_value = reg +
3811      const2, then replace initial_value with const1 and final_value
3812      with const2.  This should be safe since we are protected by the
3813      initial comparison before entering the loop if we have a vtop.
3814      For example, a + b < a + c is not equivalent to b < c for all a
3815      when using modulo arithmetic.
3816
3817      ??? Without a vtop we could still perform the optimization if we check
3818      the initial and final values carefully.  */
3819   if (loop->vtop
3820       && (reg_term = find_common_reg_term (initial_value, final_value)))
3821     {
3822       initial_value = subtract_reg_term (initial_value, reg_term);
3823       final_value = subtract_reg_term (final_value, reg_term);
3824     }
3825
3826   loop_info->initial_equiv_value = initial_value;
3827   loop_info->final_equiv_value = final_value;
3828
3829   /* For EQ comparison loops, we don't have a valid final value.
3830      Check this now so that we won't leave an invalid value if we
3831      return early for any other reason.  */
3832   if (comparison_code == EQ)
3833     loop_info->final_equiv_value = loop_info->final_value = 0;
3834
3835   if (increment == 0)
3836     {
3837       if (loop_dump_stream)
3838         fprintf (loop_dump_stream,
3839                  "Loop iterations: Increment value can't be calculated.\n");
3840       return 0;
3841     }
3842
3843   if (GET_CODE (increment) != CONST_INT)
3844     {
3845       /* If we have a REG, check to see if REG holds a constant value.  */
3846       /* ??? Other RTL, such as (neg (reg)) is possible here, but it isn't
3847          clear if it is worthwhile to try to handle such RTL.  */
3848       if (GET_CODE (increment) == REG || GET_CODE (increment) == SUBREG)
3849         increment = loop_find_equiv_value (loop, increment);
3850
3851       if (GET_CODE (increment) != CONST_INT)
3852         {
3853           if (loop_dump_stream)
3854             {
3855               fprintf (loop_dump_stream,
3856                        "Loop iterations: Increment value not constant ");
3857               print_simple_rtl (loop_dump_stream, increment);
3858               fprintf (loop_dump_stream, ".\n");
3859             }
3860           return 0;
3861         }
3862       loop_info->increment = increment;
3863     }
3864
3865   if (GET_CODE (initial_value) != CONST_INT)
3866     {
3867       if (loop_dump_stream)
3868         {
3869           fprintf (loop_dump_stream,
3870                    "Loop iterations: Initial value not constant ");
3871           print_simple_rtl (loop_dump_stream, initial_value);
3872           fprintf (loop_dump_stream, ".\n");
3873         }
3874       return 0;
3875     }
3876   else if (comparison_code == EQ)
3877     {
3878       if (loop_dump_stream)
3879         fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n");
3880       return 0;
3881     }
3882   else if (GET_CODE (final_value) != CONST_INT)
3883     {
3884       if (loop_dump_stream)
3885         {
3886           fprintf (loop_dump_stream,
3887                    "Loop iterations: Final value not constant ");
3888           print_simple_rtl (loop_dump_stream, final_value);
3889           fprintf (loop_dump_stream, ".\n");
3890         }
3891       return 0;
3892     }
3893
3894   /* Final_larger is 1 if final larger, 0 if they are equal, otherwise -1.  */
3895   if (unsigned_p)
3896     final_larger
3897       = ((unsigned HOST_WIDE_INT) INTVAL (final_value)
3898          > (unsigned HOST_WIDE_INT) INTVAL (initial_value))
3899         - ((unsigned HOST_WIDE_INT) INTVAL (final_value)
3900            < (unsigned HOST_WIDE_INT) INTVAL (initial_value));
3901   else
3902     final_larger = (INTVAL (final_value) > INTVAL (initial_value))
3903       - (INTVAL (final_value) < INTVAL (initial_value));
3904
3905   if (INTVAL (increment) > 0)
3906     increment_dir = 1;
3907   else if (INTVAL (increment) == 0)
3908     increment_dir = 0;
3909   else
3910     increment_dir = -1;
3911
3912   /* There are 27 different cases: compare_dir = -1, 0, 1;
3913      final_larger = -1, 0, 1; increment_dir = -1, 0, 1.
3914      There are 4 normal cases, 4 reverse cases (where the iteration variable
3915      will overflow before the loop exits), 4 infinite loop cases, and 15
3916      immediate exit (0 or 1 iteration depending on loop type) cases.
3917      Only try to optimize the normal cases.  */
3918
3919   /* (compare_dir/final_larger/increment_dir)
3920      Normal cases: (0/-1/-1), (0/1/1), (-1/-1/-1), (1/1/1)
3921      Reverse cases: (0/-1/1), (0/1/-1), (-1/-1/1), (1/1/-1)
3922      Infinite loops: (0/-1/0), (0/1/0), (-1/-1/0), (1/1/0)
3923      Immediate exit: (0/0/X), (-1/0/X), (-1/1/X), (1/0/X), (1/-1/X) */
3924
3925   /* ?? If the meaning of reverse loops (where the iteration variable
3926      will overflow before the loop exits) is undefined, then could
3927      eliminate all of these special checks, and just always assume
3928      the loops are normal/immediate/infinite.  Note that this means
3929      the sign of increment_dir does not have to be known.  Also,
3930      since it does not really hurt if immediate exit loops or infinite loops
3931      are optimized, then that case could be ignored also, and hence all
3932      loops can be optimized.
3933
3934      According to ANSI Spec, the reverse loop case result is undefined,
3935      because the action on overflow is undefined.
3936
3937      See also the special test for NE loops below.  */
3938
3939   if (final_larger == increment_dir && final_larger != 0
3940       && (final_larger == compare_dir || compare_dir == 0))
3941     /* Normal case.  */
3942     ;
3943   else
3944     {
3945       if (loop_dump_stream)
3946         fprintf (loop_dump_stream, "Loop iterations: Not normal loop.\n");
3947       return 0;
3948     }
3949
3950   /* Calculate the number of iterations, final_value is only an approximation,
3951      so correct for that.  Note that abs_diff and n_iterations are
3952      unsigned, because they can be as large as 2^n - 1.  */
3953
3954   abs_inc = INTVAL (increment);
3955   if (abs_inc > 0)
3956     abs_diff = INTVAL (final_value) - INTVAL (initial_value);
3957   else if (abs_inc < 0)
3958     {
3959       abs_diff = INTVAL (initial_value) - INTVAL (final_value);
3960       abs_inc = -abs_inc;
3961     }
3962   else
3963     abort ();
3964
3965   abs_diff = trunc_int_for_mode (abs_diff, GET_MODE (iteration_var));
3966
3967   /* For NE tests, make sure that the iteration variable won't miss
3968      the final value.  If abs_diff mod abs_incr is not zero, then the
3969      iteration variable will overflow before the loop exits, and we
3970      can not calculate the number of iterations.  */
3971   if (compare_dir == 0 && (abs_diff % abs_inc) != 0)
3972     return 0;
3973
3974   /* Note that the number of iterations could be calculated using
3975      (abs_diff + abs_inc - 1) / abs_inc, provided care was taken to
3976      handle potential overflow of the summation.  */
3977   loop_info->n_iterations = abs_diff / abs_inc + ((abs_diff % abs_inc) != 0);
3978   return loop_info->n_iterations;
3979 }
3980
3981 /* Replace uses of split bivs with their split pseudo register.  This is
3982    for original instructions which remain after loop unrolling without
3983    copying.  */
3984
3985 static rtx
3986 remap_split_bivs (loop, x)
3987      struct loop *loop;
3988      rtx x;
3989 {
3990   struct loop_ivs *ivs = LOOP_IVS (loop);
3991   register enum rtx_code code;
3992   register int i;
3993   register const char *fmt;
3994
3995   if (x == 0)
3996     return x;
3997
3998   code = GET_CODE (x);
3999   switch (code)
4000     {
4001     case SCRATCH:
4002     case PC:
4003     case CC0:
4004     case CONST_INT:
4005     case CONST_DOUBLE:
4006     case CONST:
4007     case SYMBOL_REF:
4008     case LABEL_REF:
4009       return x;
4010
4011     case REG:
4012 #if 0
4013       /* If non-reduced/final-value givs were split, then this would also
4014          have to remap those givs also.  */
4015 #endif
4016       if (REGNO (x) < ivs->n_regs
4017           && REG_IV_TYPE (ivs, REGNO (x)) == BASIC_INDUCT)
4018         return REG_IV_CLASS (ivs, REGNO (x))->biv->src_reg;
4019       break;
4020
4021     default:
4022       break;
4023     }
4024
4025   fmt = GET_RTX_FORMAT (code);
4026   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4027     {
4028       if (fmt[i] == 'e')
4029         XEXP (x, i) = remap_split_bivs (loop, XEXP (x, i));
4030       else if (fmt[i] == 'E')
4031         {
4032           register int j;
4033           for (j = 0; j < XVECLEN (x, i); j++)
4034             XVECEXP (x, i, j) = remap_split_bivs (loop, XVECEXP (x, i, j));
4035         }
4036     }
4037   return x;
4038 }
4039
4040 /* If FIRST_UID is a set of REGNO, and FIRST_UID dominates LAST_UID (e.g.
4041    FIST_UID is always executed if LAST_UID is), then return 1.  Otherwise
4042    return 0.  COPY_START is where we can start looking for the insns
4043    FIRST_UID and LAST_UID.  COPY_END is where we stop looking for these
4044    insns.
4045
4046    If there is no JUMP_INSN between LOOP_START and FIRST_UID, then FIRST_UID
4047    must dominate LAST_UID.
4048
4049    If there is a CODE_LABEL between FIRST_UID and LAST_UID, then FIRST_UID
4050    may not dominate LAST_UID.
4051
4052    If there is no CODE_LABEL between FIRST_UID and LAST_UID, then FIRST_UID
4053    must dominate LAST_UID.  */
4054
4055 int
4056 set_dominates_use (regno, first_uid, last_uid, copy_start, copy_end)
4057      int regno;
4058      int first_uid;
4059      int last_uid;
4060      rtx copy_start;
4061      rtx copy_end;
4062 {
4063   int passed_jump = 0;
4064   rtx p = NEXT_INSN (copy_start);
4065
4066   while (INSN_UID (p) != first_uid)
4067     {
4068       if (GET_CODE (p) == JUMP_INSN)
4069         passed_jump = 1;
4070       /* Could not find FIRST_UID.  */
4071       if (p == copy_end)
4072         return 0;
4073       p = NEXT_INSN (p);
4074     }
4075
4076   /* Verify that FIRST_UID is an insn that entirely sets REGNO.  */
4077   if (! INSN_P (p) || ! dead_or_set_regno_p (p, regno))
4078     return 0;
4079
4080   /* FIRST_UID is always executed.  */
4081   if (passed_jump == 0)
4082     return 1;
4083
4084   while (INSN_UID (p) != last_uid)
4085     {
4086       /* If we see a CODE_LABEL between FIRST_UID and LAST_UID, then we
4087          can not be sure that FIRST_UID dominates LAST_UID.  */
4088       if (GET_CODE (p) == CODE_LABEL)
4089         return 0;
4090       /* Could not find LAST_UID, but we reached the end of the loop, so
4091          it must be safe.  */
4092       else if (p == copy_end)
4093         return 1;
4094       p = NEXT_INSN (p);
4095     }
4096
4097   /* FIRST_UID is always executed if LAST_UID is executed.  */
4098   return 1;
4099 }
4100
4101 /* This routine is called when the number of iterations for the unrolled
4102    loop is one.   The goal is to identify a loop that begins with an
4103    unconditional branch to the loop continuation note (or a label just after).
4104    In this case, the unconditional branch that starts the loop needs to be
4105    deleted so that we execute the single iteration.  */
4106
4107 static rtx
4108 ujump_to_loop_cont (loop_start, loop_cont)
4109      rtx loop_start;
4110      rtx loop_cont;
4111 {
4112   rtx x, label, label_ref;
4113
4114   /* See if loop start, or the next insn is an unconditional jump.  */
4115   loop_start = next_nonnote_insn (loop_start);
4116
4117   x = pc_set (loop_start);
4118   if (!x)
4119     return NULL_RTX;
4120
4121   label_ref = SET_SRC (x);
4122   if (!label_ref)
4123     return NULL_RTX;
4124
4125   /* Examine insn after loop continuation note.  Return if not a label.  */
4126   label = next_nonnote_insn (loop_cont);
4127   if (label == 0 || GET_CODE (label) != CODE_LABEL)
4128     return NULL_RTX;
4129
4130   /* Return the loop start if the branch label matches the code label.  */
4131   if (CODE_LABEL_NUMBER (label) == CODE_LABEL_NUMBER (XEXP (label_ref, 0)))
4132     return loop_start;
4133   else
4134     return NULL_RTX;
4135 }