OSDN Git Service

contrib:
[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->initial_value == 0)
1385     {
1386       if (loop_dump_stream)
1387         fprintf (loop_dump_stream,
1388                  "Preconditioning: Could not find initial value.\n");
1389       return 0;
1390     }
1391   else if (loop_info->increment == 0)
1392     {
1393       if (loop_dump_stream)
1394         fprintf (loop_dump_stream,
1395                  "Preconditioning: Could not find increment value.\n");
1396       return 0;
1397     }
1398   else if (GET_CODE (loop_info->increment) != CONST_INT)
1399     {
1400       if (loop_dump_stream)
1401         fprintf (loop_dump_stream,
1402                  "Preconditioning: Increment not a constant.\n");
1403       return 0;
1404     }
1405   else if ((exact_log2 (INTVAL (loop_info->increment)) < 0)
1406            && (exact_log2 (-INTVAL (loop_info->increment)) < 0))
1407     {
1408       if (loop_dump_stream)
1409         fprintf (loop_dump_stream,
1410                  "Preconditioning: Increment not a constant power of 2.\n");
1411       return 0;
1412     }
1413
1414   /* Unsigned_compare and compare_dir can be ignored here, since they do
1415      not matter for preconditioning.  */
1416
1417   if (loop_info->final_value == 0)
1418     {
1419       if (loop_dump_stream)
1420         fprintf (loop_dump_stream,
1421                  "Preconditioning: EQ comparison loop.\n");
1422       return 0;
1423     }
1424
1425   /* Must ensure that final_value is invariant, so call
1426      loop_invariant_p to check.  Before doing so, must check regno
1427      against max_reg_before_loop to make sure that the register is in
1428      the range covered by loop_invariant_p.  If it isn't, then it is
1429      most likely a biv/giv which by definition are not invariant.  */
1430   if ((GET_CODE (loop_info->final_value) == REG
1431        && REGNO (loop_info->final_value) >= max_reg_before_loop)
1432       || (GET_CODE (loop_info->final_value) == PLUS
1433           && REGNO (XEXP (loop_info->final_value, 0)) >= max_reg_before_loop)
1434       || ! loop_invariant_p (loop, loop_info->final_value))
1435     {
1436       if (loop_dump_stream)
1437         fprintf (loop_dump_stream,
1438                  "Preconditioning: Final value not invariant.\n");
1439       return 0;
1440     }
1441
1442   /* Fail for floating point values, since the caller of this function
1443      does not have code to deal with them.  */
1444   if (GET_MODE_CLASS (GET_MODE (loop_info->final_value)) == MODE_FLOAT
1445       || GET_MODE_CLASS (GET_MODE (loop_info->initial_value)) == MODE_FLOAT)
1446     {
1447       if (loop_dump_stream)
1448         fprintf (loop_dump_stream,
1449                  "Preconditioning: Floating point final or initial value.\n");
1450       return 0;
1451     }
1452
1453   /* Fail if loop_info->iteration_var is not live before loop_start,
1454      since we need to test its value in the preconditioning code.  */
1455
1456   if (REGNO_FIRST_LUID (REGNO (loop_info->iteration_var))
1457       > INSN_LUID (loop_start))
1458     {
1459       if (loop_dump_stream)
1460         fprintf (loop_dump_stream,
1461                  "Preconditioning: Iteration var not live before loop start.\n");
1462       return 0;
1463     }
1464
1465   /* Note that loop_iterations biases the initial value for GIV iterators
1466      such as "while (i-- > 0)" so that we can calculate the number of
1467      iterations just like for BIV iterators.
1468
1469      Also note that the absolute values of initial_value and
1470      final_value are unimportant as only their difference is used for
1471      calculating the number of loop iterations.  */
1472   *initial_value = loop_info->initial_value;
1473   *increment = loop_info->increment;
1474   *final_value = loop_info->final_value;
1475
1476   /* Decide what mode to do these calculations in.  Choose the larger
1477      of final_value's mode and initial_value's mode, or a full-word if
1478      both are constants.  */
1479   *mode = GET_MODE (*final_value);
1480   if (*mode == VOIDmode)
1481     {
1482       *mode = GET_MODE (*initial_value);
1483       if (*mode == VOIDmode)
1484         *mode = word_mode;
1485     }
1486   else if (*mode != GET_MODE (*initial_value)
1487            && (GET_MODE_SIZE (*mode)
1488                < GET_MODE_SIZE (GET_MODE (*initial_value))))
1489     *mode = GET_MODE (*initial_value);
1490
1491   /* Success!  */
1492   if (loop_dump_stream)
1493     fprintf (loop_dump_stream, "Preconditioning: Successful.\n");
1494   return 1;
1495 }
1496
1497 /* All pseudo-registers must be mapped to themselves.  Two hard registers
1498    must be mapped, VIRTUAL_STACK_VARS_REGNUM and VIRTUAL_INCOMING_ARGS_
1499    REGNUM, to avoid function-inlining specific conversions of these
1500    registers.  All other hard regs can not be mapped because they may be
1501    used with different
1502    modes.  */
1503
1504 static void
1505 init_reg_map (map, maxregnum)
1506      struct inline_remap *map;
1507      int maxregnum;
1508 {
1509   int i;
1510
1511   for (i = maxregnum - 1; i > LAST_VIRTUAL_REGISTER; i--)
1512     map->reg_map[i] = regno_reg_rtx[i];
1513   /* Just clear the rest of the entries.  */
1514   for (i = LAST_VIRTUAL_REGISTER; i >= 0; i--)
1515     map->reg_map[i] = 0;
1516
1517   map->reg_map[VIRTUAL_STACK_VARS_REGNUM]
1518     = regno_reg_rtx[VIRTUAL_STACK_VARS_REGNUM];
1519   map->reg_map[VIRTUAL_INCOMING_ARGS_REGNUM]
1520     = regno_reg_rtx[VIRTUAL_INCOMING_ARGS_REGNUM];
1521 }
1522 \f
1523 /* Strength-reduction will often emit code for optimized biv/givs which
1524    calculates their value in a temporary register, and then copies the result
1525    to the iv.  This procedure reconstructs the pattern computing the iv;
1526    verifying that all operands are of the proper form.
1527
1528    PATTERN must be the result of single_set.
1529    The return value is the amount that the giv is incremented by.  */
1530
1531 static rtx
1532 calculate_giv_inc (pattern, src_insn, regno)
1533      rtx pattern, src_insn;
1534      unsigned int regno;
1535 {
1536   rtx increment;
1537   rtx increment_total = 0;
1538   int tries = 0;
1539
1540  retry:
1541   /* Verify that we have an increment insn here.  First check for a plus
1542      as the set source.  */
1543   if (GET_CODE (SET_SRC (pattern)) != PLUS)
1544     {
1545       /* SR sometimes computes the new giv value in a temp, then copies it
1546          to the new_reg.  */
1547       src_insn = PREV_INSN (src_insn);
1548       pattern = PATTERN (src_insn);
1549       if (GET_CODE (SET_SRC (pattern)) != PLUS)
1550         abort ();
1551
1552       /* The last insn emitted is not needed, so delete it to avoid confusing
1553          the second cse pass.  This insn sets the giv unnecessarily.  */
1554       delete_insn (get_last_insn ());
1555     }
1556
1557   /* Verify that we have a constant as the second operand of the plus.  */
1558   increment = XEXP (SET_SRC (pattern), 1);
1559   if (GET_CODE (increment) != CONST_INT)
1560     {
1561       /* SR sometimes puts the constant in a register, especially if it is
1562          too big to be an add immed operand.  */
1563       src_insn = PREV_INSN (src_insn);
1564       increment = SET_SRC (PATTERN (src_insn));
1565
1566       /* SR may have used LO_SUM to compute the constant if it is too large
1567          for a load immed operand.  In this case, the constant is in operand
1568          one of the LO_SUM rtx.  */
1569       if (GET_CODE (increment) == LO_SUM)
1570         increment = XEXP (increment, 1);
1571
1572       /* Some ports store large constants in memory and add a REG_EQUAL
1573          note to the store insn.  */
1574       else if (GET_CODE (increment) == MEM)
1575         {
1576           rtx note = find_reg_note (src_insn, REG_EQUAL, 0);
1577           if (note)
1578             increment = XEXP (note, 0);
1579         }
1580
1581       else if (GET_CODE (increment) == IOR
1582                || GET_CODE (increment) == ASHIFT
1583                || GET_CODE (increment) == PLUS)
1584         {
1585           /* The rs6000 port loads some constants with IOR.
1586              The alpha port loads some constants with ASHIFT and PLUS.  */
1587           rtx second_part = XEXP (increment, 1);
1588           enum rtx_code code = GET_CODE (increment);
1589
1590           src_insn = PREV_INSN (src_insn);
1591           increment = SET_SRC (PATTERN (src_insn));
1592           /* Don't need the last insn anymore.  */
1593           delete_insn (get_last_insn ());
1594
1595           if (GET_CODE (second_part) != CONST_INT
1596               || GET_CODE (increment) != CONST_INT)
1597             abort ();
1598
1599           if (code == IOR)
1600             increment = GEN_INT (INTVAL (increment) | INTVAL (second_part));
1601           else if (code == PLUS)
1602             increment = GEN_INT (INTVAL (increment) + INTVAL (second_part));
1603           else
1604             increment = GEN_INT (INTVAL (increment) << INTVAL (second_part));
1605         }
1606
1607       if (GET_CODE (increment) != CONST_INT)
1608         abort ();
1609
1610       /* The insn loading the constant into a register is no longer needed,
1611          so delete it.  */
1612       delete_insn (get_last_insn ());
1613     }
1614
1615   if (increment_total)
1616     increment_total = GEN_INT (INTVAL (increment_total) + INTVAL (increment));
1617   else
1618     increment_total = increment;
1619
1620   /* Check that the source register is the same as the register we expected
1621      to see as the source.  If not, something is seriously wrong.  */
1622   if (GET_CODE (XEXP (SET_SRC (pattern), 0)) != REG
1623       || REGNO (XEXP (SET_SRC (pattern), 0)) != regno)
1624     {
1625       /* Some machines (e.g. the romp), may emit two add instructions for
1626          certain constants, so lets try looking for another add immediately
1627          before this one if we have only seen one add insn so far.  */
1628
1629       if (tries == 0)
1630         {
1631           tries++;
1632
1633           src_insn = PREV_INSN (src_insn);
1634           pattern = PATTERN (src_insn);
1635
1636           delete_insn (get_last_insn ());
1637
1638           goto retry;
1639         }
1640
1641       abort ();
1642     }
1643
1644   return increment_total;
1645 }
1646
1647 /* Copy REG_NOTES, except for insn references, because not all insn_map
1648    entries are valid yet.  We do need to copy registers now though, because
1649    the reg_map entries can change during copying.  */
1650
1651 static rtx
1652 initial_reg_note_copy (notes, map)
1653      rtx notes;
1654      struct inline_remap *map;
1655 {
1656   rtx copy;
1657
1658   if (notes == 0)
1659     return 0;
1660
1661   copy = rtx_alloc (GET_CODE (notes));
1662   PUT_MODE (copy, GET_MODE (notes));
1663
1664   if (GET_CODE (notes) == EXPR_LIST)
1665     XEXP (copy, 0) = copy_rtx_and_substitute (XEXP (notes, 0), map, 0);
1666   else if (GET_CODE (notes) == INSN_LIST)
1667     /* Don't substitute for these yet.  */
1668     XEXP (copy, 0) = XEXP (notes, 0);
1669   else
1670     abort ();
1671
1672   XEXP (copy, 1) = initial_reg_note_copy (XEXP (notes, 1), map);
1673
1674   return copy;
1675 }
1676
1677 /* Fixup insn references in copied REG_NOTES.  */
1678
1679 static void
1680 final_reg_note_copy (notes, map)
1681      rtx notes;
1682      struct inline_remap *map;
1683 {
1684   rtx note;
1685
1686   for (note = notes; note; note = XEXP (note, 1))
1687     if (GET_CODE (note) == INSN_LIST)
1688       XEXP (note, 0) = map->insn_map[INSN_UID (XEXP (note, 0))];
1689 }
1690
1691 /* Copy each instruction in the loop, substituting from map as appropriate.
1692    This is very similar to a loop in expand_inline_function.  */
1693
1694 static void
1695 copy_loop_body (loop, copy_start, copy_end, map, exit_label, last_iteration,
1696                 unroll_type, start_label, loop_end, insert_before,
1697                 copy_notes_from)
1698      struct loop *loop;
1699      rtx copy_start, copy_end;
1700      struct inline_remap *map;
1701      rtx exit_label;
1702      int last_iteration;
1703      enum unroll_types unroll_type;
1704      rtx start_label, loop_end, insert_before, copy_notes_from;
1705 {
1706   struct loop_ivs *ivs = LOOP_IVS (loop);
1707   rtx insn, pattern;
1708   rtx set, tem, copy = NULL_RTX;
1709   int dest_reg_was_split, i;
1710 #ifdef HAVE_cc0
1711   rtx cc0_insn = 0;
1712 #endif
1713   rtx final_label = 0;
1714   rtx giv_inc, giv_dest_reg, giv_src_reg;
1715
1716   /* If this isn't the last iteration, then map any references to the
1717      start_label to final_label.  Final label will then be emitted immediately
1718      after the end of this loop body if it was ever used.
1719
1720      If this is the last iteration, then map references to the start_label
1721      to itself.  */
1722   if (! last_iteration)
1723     {
1724       final_label = gen_label_rtx ();
1725       set_label_in_map (map, CODE_LABEL_NUMBER (start_label), final_label);
1726     }
1727   else
1728     set_label_in_map (map, CODE_LABEL_NUMBER (start_label), start_label);
1729
1730   start_sequence ();
1731
1732   /* Emit a NOTE_INSN_DELETED to force at least two insns onto the sequence.
1733      Else gen_sequence could return a raw pattern for a jump which we pass
1734      off to emit_insn_before (instead of emit_jump_insn_before) which causes
1735      a variety of losing behaviors later.  */
1736   emit_note (0, NOTE_INSN_DELETED);
1737
1738   insn = copy_start;
1739   do
1740     {
1741       insn = NEXT_INSN (insn);
1742
1743       map->orig_asm_operands_vector = 0;
1744
1745       switch (GET_CODE (insn))
1746         {
1747         case INSN:
1748           pattern = PATTERN (insn);
1749           copy = 0;
1750           giv_inc = 0;
1751
1752           /* Check to see if this is a giv that has been combined with
1753              some split address givs.  (Combined in the sense that
1754              `combine_givs' in loop.c has put two givs in the same register.)
1755              In this case, we must search all givs based on the same biv to
1756              find the address givs.  Then split the address givs.
1757              Do this before splitting the giv, since that may map the
1758              SET_DEST to a new register.  */
1759
1760           if ((set = single_set (insn))
1761               && GET_CODE (SET_DEST (set)) == REG
1762               && addr_combined_regs[REGNO (SET_DEST (set))])
1763             {
1764               struct iv_class *bl;
1765               struct induction *v, *tv;
1766               unsigned int regno = REGNO (SET_DEST (set));
1767
1768               v = addr_combined_regs[REGNO (SET_DEST (set))];
1769               bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
1770
1771               /* Although the giv_inc amount is not needed here, we must call
1772                  calculate_giv_inc here since it might try to delete the
1773                  last insn emitted.  If we wait until later to call it,
1774                  we might accidentally delete insns generated immediately
1775                  below by emit_unrolled_add.  */
1776
1777               giv_inc = calculate_giv_inc (set, insn, regno);
1778
1779               /* Now find all address giv's that were combined with this
1780                  giv 'v'.  */
1781               for (tv = bl->giv; tv; tv = tv->next_iv)
1782                 if (tv->giv_type == DEST_ADDR && tv->same == v)
1783                   {
1784                     int this_giv_inc;
1785
1786                     /* If this DEST_ADDR giv was not split, then ignore it.  */
1787                     if (*tv->location != tv->dest_reg)
1788                       continue;
1789
1790                     /* Scale this_giv_inc if the multiplicative factors of
1791                        the two givs are different.  */
1792                     this_giv_inc = INTVAL (giv_inc);
1793                     if (tv->mult_val != v->mult_val)
1794                       this_giv_inc = (this_giv_inc / INTVAL (v->mult_val)
1795                                       * INTVAL (tv->mult_val));
1796
1797                     tv->dest_reg = plus_constant (tv->dest_reg, this_giv_inc);
1798                     *tv->location = tv->dest_reg;
1799
1800                     if (last_iteration && unroll_type != UNROLL_COMPLETELY)
1801                       {
1802                         /* Must emit an insn to increment the split address
1803                            giv.  Add in the const_adjust field in case there
1804                            was a constant eliminated from the address.  */
1805                         rtx value, dest_reg;
1806
1807                         /* tv->dest_reg will be either a bare register,
1808                            or else a register plus a constant.  */
1809                         if (GET_CODE (tv->dest_reg) == REG)
1810                           dest_reg = tv->dest_reg;
1811                         else
1812                           dest_reg = XEXP (tv->dest_reg, 0);
1813
1814                         /* Check for shared address givs, and avoid
1815                            incrementing the shared pseudo reg more than
1816                            once.  */
1817                         if (! tv->same_insn && ! tv->shared)
1818                           {
1819                             /* tv->dest_reg may actually be a (PLUS (REG)
1820                                (CONST)) here, so we must call plus_constant
1821                                to add the const_adjust amount before calling
1822                                emit_unrolled_add below.  */
1823                             value = plus_constant (tv->dest_reg,
1824                                                    tv->const_adjust);
1825
1826                             if (GET_CODE (value) == PLUS)
1827                               {
1828                                 /* The constant could be too large for an add
1829                                    immediate, so can't directly emit an insn
1830                                    here.  */
1831                                 emit_unrolled_add (dest_reg, XEXP (value, 0),
1832                                                    XEXP (value, 1));
1833                               }
1834                           }
1835
1836                         /* Reset the giv to be just the register again, in case
1837                            it is used after the set we have just emitted.
1838                            We must subtract the const_adjust factor added in
1839                            above.  */
1840                         tv->dest_reg = plus_constant (dest_reg,
1841                                                       -tv->const_adjust);
1842                         *tv->location = tv->dest_reg;
1843                       }
1844                   }
1845             }
1846
1847           /* If this is a setting of a splittable variable, then determine
1848              how to split the variable, create a new set based on this split,
1849              and set up the reg_map so that later uses of the variable will
1850              use the new split variable.  */
1851
1852           dest_reg_was_split = 0;
1853
1854           if ((set = single_set (insn))
1855               && GET_CODE (SET_DEST (set)) == REG
1856               && splittable_regs[REGNO (SET_DEST (set))])
1857             {
1858               unsigned int regno = REGNO (SET_DEST (set));
1859               unsigned int src_regno;
1860
1861               dest_reg_was_split = 1;
1862
1863               giv_dest_reg = SET_DEST (set);
1864               giv_src_reg = giv_dest_reg;
1865               /* Compute the increment value for the giv, if it wasn't
1866                  already computed above.  */
1867               if (giv_inc == 0)
1868                 giv_inc = calculate_giv_inc (set, insn, regno);
1869
1870               src_regno = REGNO (giv_src_reg);
1871
1872               if (unroll_type == UNROLL_COMPLETELY)
1873                 {
1874                   /* Completely unrolling the loop.  Set the induction
1875                      variable to a known constant value.  */
1876
1877                   /* The value in splittable_regs may be an invariant
1878                      value, so we must use plus_constant here.  */
1879                   splittable_regs[regno]
1880                     = plus_constant (splittable_regs[src_regno],
1881                                      INTVAL (giv_inc));
1882
1883                   if (GET_CODE (splittable_regs[regno]) == PLUS)
1884                     {
1885                       giv_src_reg = XEXP (splittable_regs[regno], 0);
1886                       giv_inc = XEXP (splittable_regs[regno], 1);
1887                     }
1888                   else
1889                     {
1890                       /* The splittable_regs value must be a REG or a
1891                          CONST_INT, so put the entire value in the giv_src_reg
1892                          variable.  */
1893                       giv_src_reg = splittable_regs[regno];
1894                       giv_inc = const0_rtx;
1895                     }
1896                 }
1897               else
1898                 {
1899                   /* Partially unrolling loop.  Create a new pseudo
1900                      register for the iteration variable, and set it to
1901                      be a constant plus the original register.  Except
1902                      on the last iteration, when the result has to
1903                      go back into the original iteration var register.  */
1904
1905                   /* Handle bivs which must be mapped to a new register
1906                      when split.  This happens for bivs which need their
1907                      final value set before loop entry.  The new register
1908                      for the biv was stored in the biv's first struct
1909                      induction entry by find_splittable_regs.  */
1910
1911                   if (regno < ivs->n_regs
1912                       && REG_IV_TYPE (ivs, regno) == BASIC_INDUCT)
1913                     {
1914                       giv_src_reg = REG_IV_CLASS (ivs, regno)->biv->src_reg;
1915                       giv_dest_reg = giv_src_reg;
1916                     }
1917
1918 #if 0
1919                   /* If non-reduced/final-value givs were split, then
1920                      this would have to remap those givs also.  See
1921                      find_splittable_regs.  */
1922 #endif
1923
1924                   splittable_regs[regno]
1925                     = simplify_gen_binary (PLUS, GET_MODE (giv_src_reg),
1926                                            giv_inc,
1927                                            splittable_regs[src_regno]);
1928                   giv_inc = splittable_regs[regno];
1929
1930                   /* Now split the induction variable by changing the dest
1931                      of this insn to a new register, and setting its
1932                      reg_map entry to point to this new register.
1933
1934                      If this is the last iteration, and this is the last insn
1935                      that will update the iv, then reuse the original dest,
1936                      to ensure that the iv will have the proper value when
1937                      the loop exits or repeats.
1938
1939                      Using splittable_regs_updates here like this is safe,
1940                      because it can only be greater than one if all
1941                      instructions modifying the iv are always executed in
1942                      order.  */
1943
1944                   if (! last_iteration
1945                       || (splittable_regs_updates[regno]-- != 1))
1946                     {
1947                       tem = gen_reg_rtx (GET_MODE (giv_src_reg));
1948                       giv_dest_reg = tem;
1949                       map->reg_map[regno] = tem;
1950                       record_base_value (REGNO (tem),
1951                                          giv_inc == const0_rtx
1952                                          ? giv_src_reg
1953                                          : gen_rtx_PLUS (GET_MODE (giv_src_reg),
1954                                                          giv_src_reg, giv_inc),
1955                                          1);
1956                     }
1957                   else
1958                     map->reg_map[regno] = giv_src_reg;
1959                 }
1960
1961               /* The constant being added could be too large for an add
1962                  immediate, so can't directly emit an insn here.  */
1963               emit_unrolled_add (giv_dest_reg, giv_src_reg, giv_inc);
1964               copy = get_last_insn ();
1965               pattern = PATTERN (copy);
1966             }
1967           else
1968             {
1969               pattern = copy_rtx_and_substitute (pattern, map, 0);
1970               copy = emit_insn (pattern);
1971             }
1972           REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
1973
1974 #ifdef HAVE_cc0
1975           /* If this insn is setting CC0, it may need to look at
1976              the insn that uses CC0 to see what type of insn it is.
1977              In that case, the call to recog via validate_change will
1978              fail.  So don't substitute constants here.  Instead,
1979              do it when we emit the following insn.
1980
1981              For example, see the pyr.md file.  That machine has signed and
1982              unsigned compares.  The compare patterns must check the
1983              following branch insn to see which what kind of compare to
1984              emit.
1985
1986              If the previous insn set CC0, substitute constants on it as
1987              well.  */
1988           if (sets_cc0_p (PATTERN (copy)) != 0)
1989             cc0_insn = copy;
1990           else
1991             {
1992               if (cc0_insn)
1993                 try_constants (cc0_insn, map);
1994               cc0_insn = 0;
1995               try_constants (copy, map);
1996             }
1997 #else
1998           try_constants (copy, map);
1999 #endif
2000
2001           /* Make split induction variable constants `permanent' since we
2002              know there are no backward branches across iteration variable
2003              settings which would invalidate this.  */
2004           if (dest_reg_was_split)
2005             {
2006               int regno = REGNO (SET_DEST (set));
2007
2008               if ((size_t) regno < VARRAY_SIZE (map->const_equiv_varray)
2009                   && (VARRAY_CONST_EQUIV (map->const_equiv_varray, regno).age
2010                       == map->const_age))
2011                 VARRAY_CONST_EQUIV (map->const_equiv_varray, regno).age = -1;
2012             }
2013           break;
2014
2015         case JUMP_INSN:
2016           pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0);
2017           copy = emit_jump_insn (pattern);
2018           REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
2019
2020           if (JUMP_LABEL (insn) == start_label && insn == copy_end
2021               && ! last_iteration)
2022             {
2023               /* Update JUMP_LABEL make invert_jump work correctly.  */
2024               JUMP_LABEL (copy) = get_label_from_map (map,
2025                                                       CODE_LABEL_NUMBER
2026                                                       (JUMP_LABEL (insn)));
2027               LABEL_NUSES (JUMP_LABEL (copy))++;
2028
2029               /* This is a branch to the beginning of the loop; this is the
2030                  last insn being copied; and this is not the last iteration.
2031                  In this case, we want to change the original fall through
2032                  case to be a branch past the end of the loop, and the
2033                  original jump label case to fall_through.  */
2034
2035               if (!invert_jump (copy, exit_label, 0))
2036                 {
2037                   rtx jmp;
2038                   rtx lab = gen_label_rtx ();
2039                   /* Can't do it by reversing the jump (probably because we
2040                      couldn't reverse the conditions), so emit a new
2041                      jump_insn after COPY, and redirect the jump around
2042                      that.  */
2043                   jmp = emit_jump_insn_after (gen_jump (exit_label), copy);
2044                   jmp = emit_barrier_after (jmp);
2045                   emit_label_after (lab, jmp);
2046                   LABEL_NUSES (lab) = 0;
2047                   if (!redirect_jump (copy, lab, 0))
2048                     abort ();
2049                 }
2050             }
2051
2052 #ifdef HAVE_cc0
2053           if (cc0_insn)
2054             try_constants (cc0_insn, map);
2055           cc0_insn = 0;
2056 #endif
2057           try_constants (copy, map);
2058
2059           /* Set the jump label of COPY correctly to avoid problems with
2060              later passes of unroll_loop, if INSN had jump label set.  */
2061           if (JUMP_LABEL (insn))
2062             {
2063               rtx label = 0;
2064
2065               /* Can't use the label_map for every insn, since this may be
2066                  the backward branch, and hence the label was not mapped.  */
2067               if ((set = single_set (copy)))
2068                 {
2069                   tem = SET_SRC (set);
2070                   if (GET_CODE (tem) == LABEL_REF)
2071                     label = XEXP (tem, 0);
2072                   else if (GET_CODE (tem) == IF_THEN_ELSE)
2073                     {
2074                       if (XEXP (tem, 1) != pc_rtx)
2075                         label = XEXP (XEXP (tem, 1), 0);
2076                       else
2077                         label = XEXP (XEXP (tem, 2), 0);
2078                     }
2079                 }
2080
2081               if (label && GET_CODE (label) == CODE_LABEL)
2082                 JUMP_LABEL (copy) = label;
2083               else
2084                 {
2085                   /* An unrecognizable jump insn, probably the entry jump
2086                      for a switch statement.  This label must have been mapped,
2087                      so just use the label_map to get the new jump label.  */
2088                   JUMP_LABEL (copy)
2089                     = get_label_from_map (map,
2090                                           CODE_LABEL_NUMBER (JUMP_LABEL (insn)));
2091                 }
2092
2093               /* If this is a non-local jump, then must increase the label
2094                  use count so that the label will not be deleted when the
2095                  original jump is deleted.  */
2096               LABEL_NUSES (JUMP_LABEL (copy))++;
2097             }
2098           else if (GET_CODE (PATTERN (copy)) == ADDR_VEC
2099                    || GET_CODE (PATTERN (copy)) == ADDR_DIFF_VEC)
2100             {
2101               rtx pat = PATTERN (copy);
2102               int diff_vec_p = GET_CODE (pat) == ADDR_DIFF_VEC;
2103               int len = XVECLEN (pat, diff_vec_p);
2104               int i;
2105
2106               for (i = 0; i < len; i++)
2107                 LABEL_NUSES (XEXP (XVECEXP (pat, diff_vec_p, i), 0))++;
2108             }
2109
2110           /* If this used to be a conditional jump insn but whose branch
2111              direction is now known, we must do something special.  */
2112           if (any_condjump_p (insn) && onlyjump_p (insn) && map->last_pc_value)
2113             {
2114 #ifdef HAVE_cc0
2115               /* If the previous insn set cc0 for us, delete it.  */
2116               if (sets_cc0_p (PREV_INSN (copy)))
2117                 delete_insn (PREV_INSN (copy));
2118 #endif
2119
2120               /* If this is now a no-op, delete it.  */
2121               if (map->last_pc_value == pc_rtx)
2122                 {
2123                   /* Don't let delete_insn delete the label referenced here,
2124                      because we might possibly need it later for some other
2125                      instruction in the loop.  */
2126                   if (JUMP_LABEL (copy))
2127                     LABEL_NUSES (JUMP_LABEL (copy))++;
2128                   delete_insn (copy);
2129                   if (JUMP_LABEL (copy))
2130                     LABEL_NUSES (JUMP_LABEL (copy))--;
2131                   copy = 0;
2132                 }
2133               else
2134                 /* Otherwise, this is unconditional jump so we must put a
2135                    BARRIER after it.  We could do some dead code elimination
2136                    here, but jump.c will do it just as well.  */
2137                 emit_barrier ();
2138             }
2139           break;
2140
2141         case CALL_INSN:
2142           pattern = copy_rtx_and_substitute (PATTERN (insn), map, 0);
2143           copy = emit_call_insn (pattern);
2144           REG_NOTES (copy) = initial_reg_note_copy (REG_NOTES (insn), map);
2145
2146           /* Because the USAGE information potentially contains objects other
2147              than hard registers, we need to copy it.  */
2148           CALL_INSN_FUNCTION_USAGE (copy)
2149             = copy_rtx_and_substitute (CALL_INSN_FUNCTION_USAGE (insn),
2150                                        map, 0);
2151
2152 #ifdef HAVE_cc0
2153           if (cc0_insn)
2154             try_constants (cc0_insn, map);
2155           cc0_insn = 0;
2156 #endif
2157           try_constants (copy, map);
2158
2159           /* Be lazy and assume CALL_INSNs clobber all hard registers.  */
2160           for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
2161             VARRAY_CONST_EQUIV (map->const_equiv_varray, i).rtx = 0;
2162           break;
2163
2164         case CODE_LABEL:
2165           /* If this is the loop start label, then we don't need to emit a
2166              copy of this label since no one will use it.  */
2167
2168           if (insn != start_label)
2169             {
2170               copy = emit_label (get_label_from_map (map,
2171                                                      CODE_LABEL_NUMBER (insn)));
2172               map->const_age++;
2173             }
2174           break;
2175
2176         case BARRIER:
2177           copy = emit_barrier ();
2178           break;
2179
2180         case NOTE:
2181           /* VTOP and CONT notes are valid only before the loop exit test.
2182              If placed anywhere else, loop may generate bad code.  */
2183           /* BASIC_BLOCK notes exist to stabilize basic block structures with
2184              the associated rtl.  We do not want to share the structure in
2185              this new block.  */
2186
2187           if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED
2188               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED_LABEL
2189               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK
2190               && ((NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_VTOP
2191                    && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_CONT)
2192                   || (last_iteration && unroll_type != UNROLL_COMPLETELY)))
2193             copy = emit_note (NOTE_SOURCE_FILE (insn),
2194                               NOTE_LINE_NUMBER (insn));
2195           else
2196             copy = 0;
2197           break;
2198
2199         default:
2200           abort ();
2201         }
2202
2203       map->insn_map[INSN_UID (insn)] = copy;
2204     }
2205   while (insn != copy_end);
2206
2207   /* Now finish coping the REG_NOTES.  */
2208   insn = copy_start;
2209   do
2210     {
2211       insn = NEXT_INSN (insn);
2212       if ((GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN
2213            || GET_CODE (insn) == CALL_INSN)
2214           && map->insn_map[INSN_UID (insn)])
2215         final_reg_note_copy (REG_NOTES (map->insn_map[INSN_UID (insn)]), map);
2216     }
2217   while (insn != copy_end);
2218
2219   /* There may be notes between copy_notes_from and loop_end.  Emit a copy of
2220      each of these notes here, since there may be some important ones, such as
2221      NOTE_INSN_BLOCK_END notes, in this group.  We don't do this on the last
2222      iteration, because the original notes won't be deleted.
2223
2224      We can't use insert_before here, because when from preconditioning,
2225      insert_before points before the loop.  We can't use copy_end, because
2226      there may be insns already inserted after it (which we don't want to
2227      copy) when not from preconditioning code.  */
2228
2229   if (! last_iteration)
2230     {
2231       for (insn = copy_notes_from; insn != loop_end; insn = NEXT_INSN (insn))
2232         {
2233           /* VTOP notes are valid only before the loop exit test.
2234              If placed anywhere else, loop may generate bad code.
2235              There is no need to test for NOTE_INSN_LOOP_CONT notes
2236              here, since COPY_NOTES_FROM will be at most one or two (for cc0)
2237              instructions before the last insn in the loop, and if the
2238              end test is that short, there will be a VTOP note between
2239              the CONT note and the test.  */
2240           if (GET_CODE (insn) == NOTE
2241               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED
2242               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK
2243               && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_VTOP)
2244             emit_note (NOTE_SOURCE_FILE (insn), NOTE_LINE_NUMBER (insn));
2245         }
2246     }
2247
2248   if (final_label && LABEL_NUSES (final_label) > 0)
2249     emit_label (final_label);
2250
2251   tem = gen_sequence ();
2252   end_sequence ();
2253   emit_insn_before (tem, insert_before);
2254 }
2255 \f
2256 /* Emit an insn, using the expand_binop to ensure that a valid insn is
2257    emitted.  This will correctly handle the case where the increment value
2258    won't fit in the immediate field of a PLUS insns.  */
2259
2260 void
2261 emit_unrolled_add (dest_reg, src_reg, increment)
2262      rtx dest_reg, src_reg, increment;
2263 {
2264   rtx result;
2265
2266   result = expand_binop (GET_MODE (dest_reg), add_optab, src_reg, increment,
2267                          dest_reg, 0, OPTAB_LIB_WIDEN);
2268
2269   if (dest_reg != result)
2270     emit_move_insn (dest_reg, result);
2271 }
2272 \f
2273 /* Searches the insns between INSN and LOOP->END.  Returns 1 if there
2274    is a backward branch in that range that branches to somewhere between
2275    LOOP->START and INSN.  Returns 0 otherwise.  */
2276
2277 /* ??? This is quadratic algorithm.  Could be rewritten to be linear.
2278    In practice, this is not a problem, because this function is seldom called,
2279    and uses a negligible amount of CPU time on average.  */
2280
2281 int
2282 back_branch_in_range_p (loop, insn)
2283      const struct loop *loop;
2284      rtx insn;
2285 {
2286   rtx p, q, target_insn;
2287   rtx loop_start = loop->start;
2288   rtx loop_end = loop->end;
2289   rtx orig_loop_end = loop->end;
2290
2291   /* Stop before we get to the backward branch at the end of the loop.  */
2292   loop_end = prev_nonnote_insn (loop_end);
2293   if (GET_CODE (loop_end) == BARRIER)
2294     loop_end = PREV_INSN (loop_end);
2295
2296   /* Check in case insn has been deleted, search forward for first non
2297      deleted insn following it.  */
2298   while (INSN_DELETED_P (insn))
2299     insn = NEXT_INSN (insn);
2300
2301   /* Check for the case where insn is the last insn in the loop.  Deal
2302      with the case where INSN was a deleted loop test insn, in which case
2303      it will now be the NOTE_LOOP_END.  */
2304   if (insn == loop_end || insn == orig_loop_end)
2305     return 0;
2306
2307   for (p = NEXT_INSN (insn); p != loop_end; p = NEXT_INSN (p))
2308     {
2309       if (GET_CODE (p) == JUMP_INSN)
2310         {
2311           target_insn = JUMP_LABEL (p);
2312
2313           /* Search from loop_start to insn, to see if one of them is
2314              the target_insn.  We can't use INSN_LUID comparisons here,
2315              since insn may not have an LUID entry.  */
2316           for (q = loop_start; q != insn; q = NEXT_INSN (q))
2317             if (q == target_insn)
2318               return 1;
2319         }
2320     }
2321
2322   return 0;
2323 }
2324
2325 /* Try to generate the simplest rtx for the expression
2326    (PLUS (MULT mult1 mult2) add1).  This is used to calculate the initial
2327    value of giv's.  */
2328
2329 static rtx
2330 fold_rtx_mult_add (mult1, mult2, add1, mode)
2331      rtx mult1, mult2, add1;
2332      enum machine_mode mode;
2333 {
2334   rtx temp, mult_res;
2335   rtx result;
2336
2337   /* The modes must all be the same.  This should always be true.  For now,
2338      check to make sure.  */
2339   if ((GET_MODE (mult1) != mode && GET_MODE (mult1) != VOIDmode)
2340       || (GET_MODE (mult2) != mode && GET_MODE (mult2) != VOIDmode)
2341       || (GET_MODE (add1) != mode && GET_MODE (add1) != VOIDmode))
2342     abort ();
2343
2344   /* Ensure that if at least one of mult1/mult2 are constant, then mult2
2345      will be a constant.  */
2346   if (GET_CODE (mult1) == CONST_INT)
2347     {
2348       temp = mult2;
2349       mult2 = mult1;
2350       mult1 = temp;
2351     }
2352
2353   mult_res = simplify_binary_operation (MULT, mode, mult1, mult2);
2354   if (! mult_res)
2355     mult_res = gen_rtx_MULT (mode, mult1, mult2);
2356
2357   /* Again, put the constant second.  */
2358   if (GET_CODE (add1) == CONST_INT)
2359     {
2360       temp = add1;
2361       add1 = mult_res;
2362       mult_res = temp;
2363     }
2364
2365   result = simplify_binary_operation (PLUS, mode, add1, mult_res);
2366   if (! result)
2367     result = gen_rtx_PLUS (mode, add1, mult_res);
2368
2369   return result;
2370 }
2371
2372 /* Searches the list of induction struct's for the biv BL, to try to calculate
2373    the total increment value for one iteration of the loop as a constant.
2374
2375    Returns the increment value as an rtx, simplified as much as possible,
2376    if it can be calculated.  Otherwise, returns 0.  */
2377
2378 rtx
2379 biv_total_increment (bl)
2380      const struct iv_class *bl;
2381 {
2382   struct induction *v;
2383   rtx result;
2384
2385   /* For increment, must check every instruction that sets it.  Each
2386      instruction must be executed only once each time through the loop.
2387      To verify this, we check that the insn is always executed, and that
2388      there are no backward branches after the insn that branch to before it.
2389      Also, the insn must have a mult_val of one (to make sure it really is
2390      an increment).  */
2391
2392   result = const0_rtx;
2393   for (v = bl->biv; v; v = v->next_iv)
2394     {
2395       if (v->always_computable && v->mult_val == const1_rtx
2396           && ! v->maybe_multiple)
2397         result = fold_rtx_mult_add (result, const1_rtx, v->add_val, v->mode);
2398       else
2399         return 0;
2400     }
2401
2402   return result;
2403 }
2404
2405 /* For each biv and giv, determine whether it can be safely split into
2406    a different variable for each unrolled copy of the loop body.  If it
2407    is safe to split, then indicate that by saving some useful info
2408    in the splittable_regs array.
2409
2410    If the loop is being completely unrolled, then splittable_regs will hold
2411    the current value of the induction variable while the loop is unrolled.
2412    It must be set to the initial value of the induction variable here.
2413    Otherwise, splittable_regs will hold the difference between the current
2414    value of the induction variable and the value the induction variable had
2415    at the top of the loop.  It must be set to the value 0 here.
2416
2417    Returns the total number of instructions that set registers that are
2418    splittable.  */
2419
2420 /* ?? If the loop is only unrolled twice, then most of the restrictions to
2421    constant values are unnecessary, since we can easily calculate increment
2422    values in this case even if nothing is constant.  The increment value
2423    should not involve a multiply however.  */
2424
2425 /* ?? Even if the biv/giv increment values aren't constant, it may still
2426    be beneficial to split the variable if the loop is only unrolled a few
2427    times, since multiplies by small integers (1,2,3,4) are very cheap.  */
2428
2429 static int
2430 find_splittable_regs (loop, unroll_type, unroll_number)
2431      const struct loop *loop;
2432      enum unroll_types unroll_type;
2433      int unroll_number;
2434 {
2435   struct loop_ivs *ivs = LOOP_IVS (loop);
2436   struct iv_class *bl;
2437   struct induction *v;
2438   rtx increment, tem;
2439   rtx biv_final_value;
2440   int biv_splittable;
2441   int result = 0;
2442
2443   for (bl = ivs->list; bl; bl = bl->next)
2444     {
2445       /* Biv_total_increment must return a constant value,
2446          otherwise we can not calculate the split values.  */
2447
2448       increment = biv_total_increment (bl);
2449       if (! increment || GET_CODE (increment) != CONST_INT)
2450         continue;
2451
2452       /* The loop must be unrolled completely, or else have a known number
2453          of iterations and only one exit, or else the biv must be dead
2454          outside the loop, or else the final value must be known.  Otherwise,
2455          it is unsafe to split the biv since it may not have the proper
2456          value on loop exit.  */
2457
2458       /* loop_number_exit_count is non-zero if the loop has an exit other than
2459          a fall through at the end.  */
2460
2461       biv_splittable = 1;
2462       biv_final_value = 0;
2463       if (unroll_type != UNROLL_COMPLETELY
2464           && (loop->exit_count || unroll_type == UNROLL_NAIVE)
2465           && (REGNO_LAST_LUID (bl->regno) >= INSN_LUID (loop->end)
2466               || ! bl->init_insn
2467               || INSN_UID (bl->init_insn) >= max_uid_for_loop
2468               || (REGNO_FIRST_LUID (bl->regno)
2469                   < INSN_LUID (bl->init_insn))
2470               || reg_mentioned_p (bl->biv->dest_reg, SET_SRC (bl->init_set)))
2471           && ! (biv_final_value = final_biv_value (loop, bl)))
2472         biv_splittable = 0;
2473
2474       /* If any of the insns setting the BIV don't do so with a simple
2475          PLUS, we don't know how to split it.  */
2476       for (v = bl->biv; biv_splittable && v; v = v->next_iv)
2477         if ((tem = single_set (v->insn)) == 0
2478             || GET_CODE (SET_DEST (tem)) != REG
2479             || REGNO (SET_DEST (tem)) != bl->regno
2480             || GET_CODE (SET_SRC (tem)) != PLUS)
2481           biv_splittable = 0;
2482
2483       /* If final value is non-zero, then must emit an instruction which sets
2484          the value of the biv to the proper value.  This is done after
2485          handling all of the givs, since some of them may need to use the
2486          biv's value in their initialization code.  */
2487
2488       /* This biv is splittable.  If completely unrolling the loop, save
2489          the biv's initial value.  Otherwise, save the constant zero.  */
2490
2491       if (biv_splittable == 1)
2492         {
2493           if (unroll_type == UNROLL_COMPLETELY)
2494             {
2495               /* If the initial value of the biv is itself (i.e. it is too
2496                  complicated for strength_reduce to compute), or is a hard
2497                  register, or it isn't invariant, then we must create a new
2498                  pseudo reg to hold the initial value of the biv.  */
2499
2500               if (GET_CODE (bl->initial_value) == REG
2501                   && (REGNO (bl->initial_value) == bl->regno
2502                       || REGNO (bl->initial_value) < FIRST_PSEUDO_REGISTER
2503                       || ! loop_invariant_p (loop, bl->initial_value)))
2504                 {
2505                   rtx tem = gen_reg_rtx (bl->biv->mode);
2506
2507                   record_base_value (REGNO (tem), bl->biv->add_val, 0);
2508                   loop_insn_hoist (loop, 
2509                                    gen_move_insn (tem, bl->biv->src_reg));
2510
2511                   if (loop_dump_stream)
2512                     fprintf (loop_dump_stream,
2513                              "Biv %d initial value remapped to %d.\n",
2514                              bl->regno, REGNO (tem));
2515
2516                   splittable_regs[bl->regno] = tem;
2517                 }
2518               else
2519                 splittable_regs[bl->regno] = bl->initial_value;
2520             }
2521           else
2522             splittable_regs[bl->regno] = const0_rtx;
2523
2524           /* Save the number of instructions that modify the biv, so that
2525              we can treat the last one specially.  */
2526
2527           splittable_regs_updates[bl->regno] = bl->biv_count;
2528           result += bl->biv_count;
2529
2530           if (loop_dump_stream)
2531             fprintf (loop_dump_stream,
2532                      "Biv %d safe to split.\n", bl->regno);
2533         }
2534
2535       /* Check every giv that depends on this biv to see whether it is
2536          splittable also.  Even if the biv isn't splittable, givs which
2537          depend on it may be splittable if the biv is live outside the
2538          loop, and the givs aren't.  */
2539
2540       result += find_splittable_givs (loop, bl, unroll_type, increment,
2541                                       unroll_number);
2542
2543       /* If final value is non-zero, then must emit an instruction which sets
2544          the value of the biv to the proper value.  This is done after
2545          handling all of the givs, since some of them may need to use the
2546          biv's value in their initialization code.  */
2547       if (biv_final_value)
2548         {
2549           /* If the loop has multiple exits, emit the insns before the
2550              loop to ensure that it will always be executed no matter
2551              how the loop exits.  Otherwise emit the insn after the loop,
2552              since this is slightly more efficient.  */
2553           if (! loop->exit_count)
2554             loop_insn_sink (loop, gen_move_insn (bl->biv->src_reg,
2555                                                  biv_final_value));
2556           else
2557             {
2558               /* Create a new register to hold the value of the biv, and then
2559                  set the biv to its final value before the loop start.  The biv
2560                  is set to its final value before loop start to ensure that
2561                  this insn will always be executed, no matter how the loop
2562                  exits.  */
2563               rtx tem = gen_reg_rtx (bl->biv->mode);
2564               record_base_value (REGNO (tem), bl->biv->add_val, 0);
2565
2566               loop_insn_hoist (loop, gen_move_insn (tem, bl->biv->src_reg));
2567               loop_insn_hoist (loop, gen_move_insn (bl->biv->src_reg,
2568                                                     biv_final_value));
2569
2570               if (loop_dump_stream)
2571                 fprintf (loop_dump_stream, "Biv %d mapped to %d for split.\n",
2572                          REGNO (bl->biv->src_reg), REGNO (tem));
2573
2574               /* Set up the mapping from the original biv register to the new
2575                  register.  */
2576               bl->biv->src_reg = tem;
2577             }
2578         }
2579     }
2580   return result;
2581 }
2582
2583 /* Return 1 if the first and last unrolled copy of the address giv V is valid
2584    for the instruction that is using it.  Do not make any changes to that
2585    instruction.  */
2586
2587 static int
2588 verify_addresses (v, giv_inc, unroll_number)
2589      struct induction *v;
2590      rtx giv_inc;
2591      int unroll_number;
2592 {
2593   int ret = 1;
2594   rtx orig_addr = *v->location;
2595   rtx last_addr = plus_constant (v->dest_reg,
2596                                  INTVAL (giv_inc) * (unroll_number - 1));
2597
2598   /* First check to see if either address would fail.   Handle the fact
2599      that we have may have a match_dup.  */
2600   if (! validate_replace_rtx (*v->location, v->dest_reg, v->insn)
2601       || ! validate_replace_rtx (*v->location, last_addr, v->insn))
2602     ret = 0;
2603
2604   /* Now put things back the way they were before.  This should always
2605    succeed.  */
2606   if (! validate_replace_rtx (*v->location, orig_addr, v->insn))
2607     abort ();
2608
2609   return ret;
2610 }
2611
2612 /* For every giv based on the biv BL, check to determine whether it is
2613    splittable.  This is a subroutine to find_splittable_regs ().
2614
2615    Return the number of instructions that set splittable registers.  */
2616
2617 static int
2618 find_splittable_givs (loop, bl, unroll_type, increment, unroll_number)
2619      const struct loop *loop;
2620      struct iv_class *bl;
2621      enum unroll_types unroll_type;
2622      rtx increment;
2623      int unroll_number;
2624 {
2625   struct loop_ivs *ivs = LOOP_IVS (loop);
2626   struct induction *v, *v2;
2627   rtx final_value;
2628   rtx tem;
2629   int result = 0;
2630
2631   /* Scan the list of givs, and set the same_insn field when there are
2632      multiple identical givs in the same insn.  */
2633   for (v = bl->giv; v; v = v->next_iv)
2634     for (v2 = v->next_iv; v2; v2 = v2->next_iv)
2635       if (v->insn == v2->insn && rtx_equal_p (v->new_reg, v2->new_reg)
2636           && ! v2->same_insn)
2637         v2->same_insn = v;
2638
2639   for (v = bl->giv; v; v = v->next_iv)
2640     {
2641       rtx giv_inc, value;
2642
2643       /* Only split the giv if it has already been reduced, or if the loop is
2644          being completely unrolled.  */
2645       if (unroll_type != UNROLL_COMPLETELY && v->ignore)
2646         continue;
2647
2648       /* The giv can be split if the insn that sets the giv is executed once
2649          and only once on every iteration of the loop.  */
2650       /* An address giv can always be split.  v->insn is just a use not a set,
2651          and hence it does not matter whether it is always executed.  All that
2652          matters is that all the biv increments are always executed, and we
2653          won't reach here if they aren't.  */
2654       if (v->giv_type != DEST_ADDR
2655           && (! v->always_computable
2656               || back_branch_in_range_p (loop, v->insn)))
2657         continue;
2658
2659       /* The giv increment value must be a constant.  */
2660       giv_inc = fold_rtx_mult_add (v->mult_val, increment, const0_rtx,
2661                                    v->mode);
2662       if (! giv_inc || GET_CODE (giv_inc) != CONST_INT)
2663         continue;
2664
2665       /* The loop must be unrolled completely, or else have a known number of
2666          iterations and only one exit, or else the giv must be dead outside
2667          the loop, or else the final value of the giv must be known.
2668          Otherwise, it is not safe to split the giv since it may not have the
2669          proper value on loop exit.  */
2670
2671       /* The used outside loop test will fail for DEST_ADDR givs.  They are
2672          never used outside the loop anyways, so it is always safe to split a
2673          DEST_ADDR giv.  */
2674
2675       final_value = 0;
2676       if (unroll_type != UNROLL_COMPLETELY
2677           && (loop->exit_count || unroll_type == UNROLL_NAIVE)
2678           && v->giv_type != DEST_ADDR
2679           /* The next part is true if the pseudo is used outside the loop.
2680              We assume that this is true for any pseudo created after loop
2681              starts, because we don't have a reg_n_info entry for them.  */
2682           && (REGNO (v->dest_reg) >= max_reg_before_loop
2683               || (REGNO_FIRST_UID (REGNO (v->dest_reg)) != INSN_UID (v->insn)
2684                   /* Check for the case where the pseudo is set by a shift/add
2685                      sequence, in which case the first insn setting the pseudo
2686                      is the first insn of the shift/add sequence.  */
2687                   && (! (tem = find_reg_note (v->insn, REG_RETVAL, NULL_RTX))
2688                       || (REGNO_FIRST_UID (REGNO (v->dest_reg))
2689                           != INSN_UID (XEXP (tem, 0)))))
2690               /* Line above always fails if INSN was moved by loop opt.  */
2691               || (REGNO_LAST_LUID (REGNO (v->dest_reg))
2692                   >= INSN_LUID (loop->end)))
2693           && ! (final_value = v->final_value))
2694         continue;
2695
2696 #if 0
2697       /* Currently, non-reduced/final-value givs are never split.  */
2698       /* Should emit insns after the loop if possible, as the biv final value
2699          code below does.  */
2700
2701       /* If the final value is non-zero, and the giv has not been reduced,
2702          then must emit an instruction to set the final value.  */
2703       if (final_value && !v->new_reg)
2704         {
2705           /* Create a new register to hold the value of the giv, and then set
2706              the giv to its final value before the loop start.  The giv is set
2707              to its final value before loop start to ensure that this insn
2708              will always be executed, no matter how we exit.  */
2709           tem = gen_reg_rtx (v->mode);
2710           loop_insn_hoist (loop, gen_move_insn (tem, v->dest_reg));
2711           loop_insn_hoist (loop, gen_move_insn (v->dest_reg, final_value));
2712
2713           if (loop_dump_stream)
2714             fprintf (loop_dump_stream, "Giv %d mapped to %d for split.\n",
2715                      REGNO (v->dest_reg), REGNO (tem));
2716
2717           v->src_reg = tem;
2718         }
2719 #endif
2720
2721       /* This giv is splittable.  If completely unrolling the loop, save the
2722          giv's initial value.  Otherwise, save the constant zero for it.  */
2723
2724       if (unroll_type == UNROLL_COMPLETELY)
2725         {
2726           /* It is not safe to use bl->initial_value here, because it may not
2727              be invariant.  It is safe to use the initial value stored in
2728              the splittable_regs array if it is set.  In rare cases, it won't
2729              be set, so then we do exactly the same thing as
2730              find_splittable_regs does to get a safe value.  */
2731           rtx biv_initial_value;
2732
2733           if (splittable_regs[bl->regno])
2734             biv_initial_value = splittable_regs[bl->regno];
2735           else if (GET_CODE (bl->initial_value) != REG
2736                    || (REGNO (bl->initial_value) != bl->regno
2737                        && REGNO (bl->initial_value) >= FIRST_PSEUDO_REGISTER))
2738             biv_initial_value = bl->initial_value;
2739           else
2740             {
2741               rtx tem = gen_reg_rtx (bl->biv->mode);
2742
2743               record_base_value (REGNO (tem), bl->biv->add_val, 0);
2744               loop_insn_hoist (loop, gen_move_insn (tem, bl->biv->src_reg));
2745               biv_initial_value = tem;
2746             }
2747           biv_initial_value = extend_value_for_giv (v, biv_initial_value);
2748           value = fold_rtx_mult_add (v->mult_val, biv_initial_value,
2749                                      v->add_val, v->mode);
2750         }
2751       else
2752         value = const0_rtx;
2753
2754       if (v->new_reg)
2755         {
2756           /* If a giv was combined with another giv, then we can only split
2757              this giv if the giv it was combined with was reduced.  This
2758              is because the value of v->new_reg is meaningless in this
2759              case.  */
2760           if (v->same && ! v->same->new_reg)
2761             {
2762               if (loop_dump_stream)
2763                 fprintf (loop_dump_stream,
2764                          "giv combined with unreduced giv not split.\n");
2765               continue;
2766             }
2767           /* If the giv is an address destination, it could be something other
2768              than a simple register, these have to be treated differently.  */
2769           else if (v->giv_type == DEST_REG)
2770             {
2771               /* If value is not a constant, register, or register plus
2772                  constant, then compute its value into a register before
2773                  loop start.  This prevents invalid rtx sharing, and should
2774                  generate better code.  We can use bl->initial_value here
2775                  instead of splittable_regs[bl->regno] because this code
2776                  is going before the loop start.  */
2777               if (unroll_type == UNROLL_COMPLETELY
2778                   && GET_CODE (value) != CONST_INT
2779                   && GET_CODE (value) != REG
2780                   && (GET_CODE (value) != PLUS
2781                       || GET_CODE (XEXP (value, 0)) != REG
2782                       || GET_CODE (XEXP (value, 1)) != CONST_INT))
2783                 {
2784                   rtx tem = gen_reg_rtx (v->mode);
2785                   record_base_value (REGNO (tem), v->add_val, 0);
2786                   loop_iv_add_mult_hoist (loop, bl->initial_value, v->mult_val,
2787                                           v->add_val, tem);
2788                   value = tem;
2789                 }
2790
2791               splittable_regs[REGNO (v->new_reg)] = value;
2792             }
2793           else
2794             {
2795               /* Splitting address givs is useful since it will often allow us
2796                  to eliminate some increment insns for the base giv as
2797                  unnecessary.  */
2798
2799               /* If the addr giv is combined with a dest_reg giv, then all
2800                  references to that dest reg will be remapped, which is NOT
2801                  what we want for split addr regs. We always create a new
2802                  register for the split addr giv, just to be safe.  */
2803
2804               /* If we have multiple identical address givs within a
2805                  single instruction, then use a single pseudo reg for
2806                  both.  This is necessary in case one is a match_dup
2807                  of the other.  */
2808
2809               v->const_adjust = 0;
2810
2811               if (v->same_insn)
2812                 {
2813                   v->dest_reg = v->same_insn->dest_reg;
2814                   if (loop_dump_stream)
2815                     fprintf (loop_dump_stream,
2816                              "Sharing address givs in insn %d\n",
2817                              INSN_UID (v->insn));
2818                 }
2819               /* If multiple address GIVs have been combined with the
2820                  same dest_reg GIV, do not create a new register for
2821                  each.  */
2822               else if (unroll_type != UNROLL_COMPLETELY
2823                        && v->giv_type == DEST_ADDR
2824                        && v->same && v->same->giv_type == DEST_ADDR
2825                        && v->same->unrolled
2826                        /* combine_givs_p may return true for some cases
2827                           where the add and mult values are not equal.
2828                           To share a register here, the values must be
2829                           equal.  */
2830                        && rtx_equal_p (v->same->mult_val, v->mult_val)
2831                        && rtx_equal_p (v->same->add_val, v->add_val)
2832                        /* If the memory references have different modes,
2833                           then the address may not be valid and we must
2834                           not share registers.  */
2835                        && verify_addresses (v, giv_inc, unroll_number))
2836                 {
2837                   v->dest_reg = v->same->dest_reg;
2838                   v->shared = 1;
2839                 }
2840               else if (unroll_type != UNROLL_COMPLETELY)
2841                 {
2842                   /* If not completely unrolling the loop, then create a new
2843                      register to hold the split value of the DEST_ADDR giv.
2844                      Emit insn to initialize its value before loop start.  */
2845
2846                   rtx tem = gen_reg_rtx (v->mode);
2847                   struct induction *same = v->same;
2848                   rtx new_reg = v->new_reg;
2849                   record_base_value (REGNO (tem), v->add_val, 0);
2850
2851                   /* If the address giv has a constant in its new_reg value,
2852                      then this constant can be pulled out and put in value,
2853                      instead of being part of the initialization code.  */
2854
2855                   if (GET_CODE (new_reg) == PLUS
2856                       && GET_CODE (XEXP (new_reg, 1)) == CONST_INT)
2857                     {
2858                       v->dest_reg
2859                         = plus_constant (tem, INTVAL (XEXP (new_reg, 1)));
2860
2861                       /* Only succeed if this will give valid addresses.
2862                          Try to validate both the first and the last
2863                          address resulting from loop unrolling, if
2864                          one fails, then can't do const elim here.  */
2865                       if (verify_addresses (v, giv_inc, unroll_number))
2866                         {
2867                           /* Save the negative of the eliminated const, so
2868                              that we can calculate the dest_reg's increment
2869                              value later.  */
2870                           v->const_adjust = -INTVAL (XEXP (new_reg, 1));
2871
2872                           new_reg = XEXP (new_reg, 0);
2873                           if (loop_dump_stream)
2874                             fprintf (loop_dump_stream,
2875                                      "Eliminating constant from giv %d\n",
2876                                      REGNO (tem));
2877                         }
2878                       else
2879                         v->dest_reg = tem;
2880                     }
2881                   else
2882                     v->dest_reg = tem;
2883
2884                   /* If the address hasn't been checked for validity yet, do so
2885                      now, and fail completely if either the first or the last
2886                      unrolled copy of the address is not a valid address
2887                      for the instruction that uses it.  */
2888                   if (v->dest_reg == tem
2889                       && ! verify_addresses (v, giv_inc, unroll_number))
2890                     {
2891                       for (v2 = v->next_iv; v2; v2 = v2->next_iv)
2892                         if (v2->same_insn == v)
2893                           v2->same_insn = 0;
2894
2895                       if (loop_dump_stream)
2896                         fprintf (loop_dump_stream,
2897                                  "Invalid address for giv at insn %d\n",
2898                                  INSN_UID (v->insn));
2899                       continue;
2900                     }
2901
2902                   v->new_reg = new_reg;
2903                   v->same = same;
2904
2905                   /* We set this after the address check, to guarantee that
2906                      the register will be initialized.  */
2907                   v->unrolled = 1;
2908
2909                   /* To initialize the new register, just move the value of
2910                      new_reg into it.  This is not guaranteed to give a valid
2911                      instruction on machines with complex addressing modes.
2912                      If we can't recognize it, then delete it and emit insns
2913                      to calculate the value from scratch.  */
2914                   loop_insn_hoist (loop, gen_rtx_SET (VOIDmode, tem,
2915                                                       copy_rtx (v->new_reg)));
2916                   if (recog_memoized (PREV_INSN (loop->start)) < 0)
2917                     {
2918                       rtx sequence, ret;
2919
2920                       /* We can't use bl->initial_value to compute the initial
2921                          value, because the loop may have been preconditioned.
2922                          We must calculate it from NEW_REG.  */
2923                       delete_insn (PREV_INSN (loop->start));
2924
2925                       start_sequence ();
2926                       ret = force_operand (v->new_reg, tem);
2927                       if (ret != tem)
2928                         emit_move_insn (tem, ret);
2929                       sequence = gen_sequence ();
2930                       end_sequence ();
2931                       loop_insn_hoist (loop, sequence);
2932
2933                       if (loop_dump_stream)
2934                         fprintf (loop_dump_stream,
2935                                  "Invalid init insn, rewritten.\n");
2936                     }
2937                 }
2938               else
2939                 {
2940                   v->dest_reg = value;
2941
2942                   /* Check the resulting address for validity, and fail
2943                      if the resulting address would be invalid.  */
2944                   if (! verify_addresses (v, giv_inc, unroll_number))
2945                     {
2946                       for (v2 = v->next_iv; v2; v2 = v2->next_iv)
2947                         if (v2->same_insn == v)
2948                           v2->same_insn = 0;
2949
2950                       if (loop_dump_stream)
2951                         fprintf (loop_dump_stream,
2952                                  "Invalid address for giv at insn %d\n",
2953                                  INSN_UID (v->insn));
2954                       continue;
2955                     }
2956                 }
2957
2958               /* Store the value of dest_reg into the insn.  This sharing
2959                  will not be a problem as this insn will always be copied
2960                  later.  */
2961
2962               *v->location = v->dest_reg;
2963
2964               /* If this address giv is combined with a dest reg giv, then
2965                  save the base giv's induction pointer so that we will be
2966                  able to handle this address giv properly.  The base giv
2967                  itself does not have to be splittable.  */
2968
2969               if (v->same && v->same->giv_type == DEST_REG)
2970                 addr_combined_regs[REGNO (v->same->new_reg)] = v->same;
2971
2972               if (GET_CODE (v->new_reg) == REG)
2973                 {
2974                   /* This giv maybe hasn't been combined with any others.
2975                      Make sure that it's giv is marked as splittable here.  */
2976
2977                   splittable_regs[REGNO (v->new_reg)] = value;
2978
2979                   /* Make it appear to depend upon itself, so that the
2980                      giv will be properly split in the main loop above.  */
2981                   if (! v->same)
2982                     {
2983                       v->same = v;
2984                       addr_combined_regs[REGNO (v->new_reg)] = v;
2985                     }
2986                 }
2987
2988               if (loop_dump_stream)
2989                 fprintf (loop_dump_stream, "DEST_ADDR giv being split.\n");
2990             }
2991         }
2992       else
2993         {
2994 #if 0
2995           /* Currently, unreduced giv's can't be split.  This is not too much
2996              of a problem since unreduced giv's are not live across loop
2997              iterations anyways.  When unrolling a loop completely though,
2998              it makes sense to reduce&split givs when possible, as this will
2999              result in simpler instructions, and will not require that a reg
3000              be live across loop iterations.  */
3001
3002           splittable_regs[REGNO (v->dest_reg)] = value;
3003           fprintf (stderr, "Giv %d at insn %d not reduced\n",
3004                    REGNO (v->dest_reg), INSN_UID (v->insn));
3005 #else
3006           continue;
3007 #endif
3008         }
3009
3010       /* Unreduced givs are only updated once by definition.  Reduced givs
3011          are updated as many times as their biv is.  Mark it so if this is
3012          a splittable register.  Don't need to do anything for address givs
3013          where this may not be a register.  */
3014
3015       if (GET_CODE (v->new_reg) == REG)
3016         {
3017           int count = 1;
3018           if (! v->ignore)
3019             count = REG_IV_CLASS (ivs, REGNO (v->src_reg))->biv_count;
3020
3021           splittable_regs_updates[REGNO (v->new_reg)] = count;
3022         }
3023
3024       result++;
3025
3026       if (loop_dump_stream)
3027         {
3028           int regnum;
3029
3030           if (GET_CODE (v->dest_reg) == CONST_INT)
3031             regnum = -1;
3032           else if (GET_CODE (v->dest_reg) != REG)
3033             regnum = REGNO (XEXP (v->dest_reg, 0));
3034           else
3035             regnum = REGNO (v->dest_reg);
3036           fprintf (loop_dump_stream, "Giv %d at insn %d safe to split.\n",
3037                    regnum, INSN_UID (v->insn));
3038         }
3039     }
3040
3041   return result;
3042 }
3043 \f
3044 /* Try to prove that the register is dead after the loop exits.  Trace every
3045    loop exit looking for an insn that will always be executed, which sets
3046    the register to some value, and appears before the first use of the register
3047    is found.  If successful, then return 1, otherwise return 0.  */
3048
3049 /* ?? Could be made more intelligent in the handling of jumps, so that
3050    it can search past if statements and other similar structures.  */
3051
3052 static int
3053 reg_dead_after_loop (loop, reg)
3054      const struct loop *loop;
3055      rtx reg;
3056 {
3057   rtx insn, label;
3058   enum rtx_code code;
3059   int jump_count = 0;
3060   int label_count = 0;
3061
3062   /* In addition to checking all exits of this loop, we must also check
3063      all exits of inner nested loops that would exit this loop.  We don't
3064      have any way to identify those, so we just give up if there are any
3065      such inner loop exits.  */
3066
3067   for (label = loop->exit_labels; label; label = LABEL_NEXTREF (label))
3068     label_count++;
3069
3070   if (label_count != loop->exit_count)
3071     return 0;
3072
3073   /* HACK: Must also search the loop fall through exit, create a label_ref
3074      here which points to the loop->end, and append the loop_number_exit_labels
3075      list to it.  */
3076   label = gen_rtx_LABEL_REF (VOIDmode, loop->end);
3077   LABEL_NEXTREF (label) = loop->exit_labels;
3078
3079   for (; label; label = LABEL_NEXTREF (label))
3080     {
3081       /* Succeed if find an insn which sets the biv or if reach end of
3082          function.  Fail if find an insn that uses the biv, or if come to
3083          a conditional jump.  */
3084
3085       insn = NEXT_INSN (XEXP (label, 0));
3086       while (insn)
3087         {
3088           code = GET_CODE (insn);
3089           if (GET_RTX_CLASS (code) == 'i')
3090             {
3091               rtx set;
3092
3093               if (reg_referenced_p (reg, PATTERN (insn)))
3094                 return 0;
3095
3096               set = single_set (insn);
3097               if (set && rtx_equal_p (SET_DEST (set), reg))
3098                 break;
3099             }
3100
3101           if (code == JUMP_INSN)
3102             {
3103               if (GET_CODE (PATTERN (insn)) == RETURN)
3104                 break;
3105               else if (!any_uncondjump_p (insn)
3106                        /* Prevent infinite loop following infinite loops.  */
3107                        || jump_count++ > 20)
3108                 return 0;
3109               else
3110                 insn = JUMP_LABEL (insn);
3111             }
3112
3113           insn = NEXT_INSN (insn);
3114         }
3115     }
3116
3117   /* Success, the register is dead on all loop exits.  */
3118   return 1;
3119 }
3120
3121 /* Try to calculate the final value of the biv, the value it will have at
3122    the end of the loop.  If we can do it, return that value.  */
3123
3124 rtx
3125 final_biv_value (loop, bl)
3126      const struct loop *loop;
3127      struct iv_class *bl;
3128 {
3129   unsigned HOST_WIDE_INT n_iterations = LOOP_INFO (loop)->n_iterations;
3130   rtx increment, tem;
3131
3132   /* ??? This only works for MODE_INT biv's.  Reject all others for now.  */
3133
3134   if (GET_MODE_CLASS (bl->biv->mode) != MODE_INT)
3135     return 0;
3136
3137   /* The final value for reversed bivs must be calculated differently than
3138      for ordinary bivs.  In this case, there is already an insn after the
3139      loop which sets this biv's final value (if necessary), and there are
3140      no other loop exits, so we can return any value.  */
3141   if (bl->reversed)
3142     {
3143       if (loop_dump_stream)
3144         fprintf (loop_dump_stream,
3145                  "Final biv value for %d, reversed biv.\n", bl->regno);
3146
3147       return const0_rtx;
3148     }
3149
3150   /* Try to calculate the final value as initial value + (number of iterations
3151      * increment).  For this to work, increment must be invariant, the only
3152      exit from the loop must be the fall through at the bottom (otherwise
3153      it may not have its final value when the loop exits), and the initial
3154      value of the biv must be invariant.  */
3155
3156   if (n_iterations != 0
3157       && ! loop->exit_count
3158       && loop_invariant_p (loop, bl->initial_value))
3159     {
3160       increment = biv_total_increment (bl);
3161
3162       if (increment && loop_invariant_p (loop, increment))
3163         {
3164           /* Can calculate the loop exit value, emit insns after loop
3165              end to calculate this value into a temporary register in
3166              case it is needed later.  */
3167
3168           tem = gen_reg_rtx (bl->biv->mode);
3169           record_base_value (REGNO (tem), bl->biv->add_val, 0);
3170           loop_iv_add_mult_sink (loop, increment, GEN_INT (n_iterations),
3171                                  bl->initial_value, tem);
3172
3173           if (loop_dump_stream)
3174             fprintf (loop_dump_stream,
3175                      "Final biv value for %d, calculated.\n", bl->regno);
3176
3177           return tem;
3178         }
3179     }
3180
3181   /* Check to see if the biv is dead at all loop exits.  */
3182   if (reg_dead_after_loop (loop, bl->biv->src_reg))
3183     {
3184       if (loop_dump_stream)
3185         fprintf (loop_dump_stream,
3186                  "Final biv value for %d, biv dead after loop exit.\n",
3187                  bl->regno);
3188
3189       return const0_rtx;
3190     }
3191
3192   return 0;
3193 }
3194
3195 /* Try to calculate the final value of the giv, the value it will have at
3196    the end of the loop.  If we can do it, return that value.  */
3197
3198 rtx
3199 final_giv_value (loop, v)
3200      const struct loop *loop;
3201      struct induction *v;
3202 {
3203   struct loop_ivs *ivs = LOOP_IVS (loop);
3204   struct iv_class *bl;
3205   rtx insn;
3206   rtx increment, tem;
3207   rtx seq;
3208   rtx loop_end = loop->end;
3209   unsigned HOST_WIDE_INT n_iterations = LOOP_INFO (loop)->n_iterations;
3210
3211   bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
3212
3213   /* The final value for givs which depend on reversed bivs must be calculated
3214      differently than for ordinary givs.  In this case, there is already an
3215      insn after the loop which sets this giv's final value (if necessary),
3216      and there are no other loop exits, so we can return any value.  */
3217   if (bl->reversed)
3218     {
3219       if (loop_dump_stream)
3220         fprintf (loop_dump_stream,
3221                  "Final giv value for %d, depends on reversed biv\n",
3222                  REGNO (v->dest_reg));
3223       return const0_rtx;
3224     }
3225
3226   /* Try to calculate the final value as a function of the biv it depends
3227      upon.  The only exit from the loop must be the fall through at the bottom
3228      (otherwise it may not have its final value when the loop exits).  */
3229
3230   /* ??? Can calculate the final giv value by subtracting off the
3231      extra biv increments times the giv's mult_val.  The loop must have
3232      only one exit for this to work, but the loop iterations does not need
3233      to be known.  */
3234
3235   if (n_iterations != 0
3236       && ! loop->exit_count)
3237     {
3238       /* ?? It is tempting to use the biv's value here since these insns will
3239          be put after the loop, and hence the biv will have its final value
3240          then.  However, this fails if the biv is subsequently eliminated.
3241          Perhaps determine whether biv's are eliminable before trying to
3242          determine whether giv's are replaceable so that we can use the
3243          biv value here if it is not eliminable.  */
3244
3245       /* We are emitting code after the end of the loop, so we must make
3246          sure that bl->initial_value is still valid then.  It will still
3247          be valid if it is invariant.  */
3248
3249       increment = biv_total_increment (bl);
3250
3251       if (increment && loop_invariant_p (loop, increment)
3252           && loop_invariant_p (loop, bl->initial_value))
3253         {
3254           /* Can calculate the loop exit value of its biv as
3255              (n_iterations * increment) + initial_value */
3256
3257           /* The loop exit value of the giv is then
3258              (final_biv_value - extra increments) * mult_val + add_val.
3259              The extra increments are any increments to the biv which
3260              occur in the loop after the giv's value is calculated.
3261              We must search from the insn that sets the giv to the end
3262              of the loop to calculate this value.  */
3263
3264           /* Put the final biv value in tem.  */
3265           tem = gen_reg_rtx (v->mode);
3266           record_base_value (REGNO (tem), bl->biv->add_val, 0);
3267           loop_iv_add_mult_sink (loop, extend_value_for_giv (v, increment),
3268                                  GEN_INT (n_iterations),
3269                                  extend_value_for_giv (v, bl->initial_value),
3270                                  tem);
3271
3272           /* Subtract off extra increments as we find them.  */
3273           for (insn = NEXT_INSN (v->insn); insn != loop_end;
3274                insn = NEXT_INSN (insn))
3275             {
3276               struct induction *biv;
3277
3278               for (biv = bl->biv; biv; biv = biv->next_iv)
3279                 if (biv->insn == insn)
3280                   {
3281                     start_sequence ();
3282                     tem = expand_binop (GET_MODE (tem), sub_optab, tem,
3283                                         biv->add_val, NULL_RTX, 0,
3284                                         OPTAB_LIB_WIDEN);
3285                     seq = gen_sequence ();
3286                     end_sequence ();
3287                     loop_insn_sink (loop, seq);
3288                   }
3289             }
3290
3291           /* Now calculate the giv's final value.  */
3292           loop_iv_add_mult_sink (loop, tem, v->mult_val, v->add_val, tem);
3293
3294           if (loop_dump_stream)
3295             fprintf (loop_dump_stream,
3296                      "Final giv value for %d, calc from biv's value.\n",
3297                      REGNO (v->dest_reg));
3298
3299           return tem;
3300         }
3301     }
3302
3303   /* Replaceable giv's should never reach here.  */
3304   if (v->replaceable)
3305     abort ();
3306
3307   /* Check to see if the biv is dead at all loop exits.  */
3308   if (reg_dead_after_loop (loop, v->dest_reg))
3309     {
3310       if (loop_dump_stream)
3311         fprintf (loop_dump_stream,
3312                  "Final giv value for %d, giv dead after loop exit.\n",
3313                  REGNO (v->dest_reg));
3314
3315       return const0_rtx;
3316     }
3317
3318   return 0;
3319 }
3320
3321 /* Look back before LOOP->START for then insn that sets REG and return
3322    the equivalent constant if there is a REG_EQUAL note otherwise just
3323    the SET_SRC of REG.  */
3324
3325 static rtx
3326 loop_find_equiv_value (loop, reg)
3327      const struct loop *loop;
3328      rtx reg;
3329 {
3330   rtx loop_start = loop->start;
3331   rtx insn, set;
3332   rtx ret;
3333
3334   ret = reg;
3335   for (insn = PREV_INSN (loop_start); insn; insn = PREV_INSN (insn))
3336     {
3337       if (GET_CODE (insn) == CODE_LABEL)
3338         break;
3339
3340       else if (INSN_P (insn) && reg_set_p (reg, insn))
3341         {
3342           /* We found the last insn before the loop that sets the register.
3343              If it sets the entire register, and has a REG_EQUAL note,
3344              then use the value of the REG_EQUAL note.  */
3345           if ((set = single_set (insn))
3346               && (SET_DEST (set) == reg))
3347             {
3348               rtx note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
3349
3350               /* Only use the REG_EQUAL note if it is a constant.
3351                  Other things, divide in particular, will cause
3352                  problems later if we use them.  */
3353               if (note && GET_CODE (XEXP (note, 0)) != EXPR_LIST
3354                   && CONSTANT_P (XEXP (note, 0)))
3355                 ret = XEXP (note, 0);
3356               else
3357                 ret = SET_SRC (set);
3358
3359               /* We cannot do this if it changes between the
3360                  assignment and loop start though.  */
3361               if (modified_between_p (ret, insn, loop_start))
3362                 ret = reg;
3363             }
3364           break;
3365         }
3366     }
3367   return ret;
3368 }
3369
3370 /* Return a simplified rtx for the expression OP - REG.
3371
3372    REG must appear in OP, and OP must be a register or the sum of a register
3373    and a second term.
3374
3375    Thus, the return value must be const0_rtx or the second term.
3376
3377    The caller is responsible for verifying that REG appears in OP and OP has
3378    the proper form.  */
3379
3380 static rtx
3381 subtract_reg_term (op, reg)
3382      rtx op, reg;
3383 {
3384   if (op == reg)
3385     return const0_rtx;
3386   if (GET_CODE (op) == PLUS)
3387     {
3388       if (XEXP (op, 0) == reg)
3389         return XEXP (op, 1);
3390       else if (XEXP (op, 1) == reg)
3391         return XEXP (op, 0);
3392     }
3393   /* OP does not contain REG as a term.  */
3394   abort ();
3395 }
3396
3397 /* Find and return register term common to both expressions OP0 and
3398    OP1 or NULL_RTX if no such term exists.  Each expression must be a
3399    REG or a PLUS of a REG.  */
3400
3401 static rtx
3402 find_common_reg_term (op0, op1)
3403      rtx op0, op1;
3404 {
3405   if ((GET_CODE (op0) == REG || GET_CODE (op0) == PLUS)
3406       && (GET_CODE (op1) == REG || GET_CODE (op1) == PLUS))
3407     {
3408       rtx op00;
3409       rtx op01;
3410       rtx op10;
3411       rtx op11;
3412
3413       if (GET_CODE (op0) == PLUS)
3414         op01 = XEXP (op0, 1), op00 = XEXP (op0, 0);
3415       else
3416         op01 = const0_rtx, op00 = op0;
3417
3418       if (GET_CODE (op1) == PLUS)
3419         op11 = XEXP (op1, 1), op10 = XEXP (op1, 0);
3420       else
3421         op11 = const0_rtx, op10 = op1;
3422
3423       /* Find and return common register term if present.  */
3424       if (REG_P (op00) && (op00 == op10 || op00 == op11))
3425         return op00;
3426       else if (REG_P (op01) && (op01 == op10 || op01 == op11))
3427         return op01;
3428     }
3429
3430   /* No common register term found.  */
3431   return NULL_RTX;
3432 }
3433
3434 /* Determine the loop iterator and calculate the number of loop
3435    iterations.  Returns the exact number of loop iterations if it can
3436    be calculated, otherwise returns zero.  */
3437
3438 unsigned HOST_WIDE_INT
3439 loop_iterations (loop)
3440      struct loop *loop;
3441 {
3442   struct loop_info *loop_info = LOOP_INFO (loop);
3443   struct loop_ivs *ivs = LOOP_IVS (loop);
3444   rtx comparison, comparison_value;
3445   rtx iteration_var, initial_value, increment, final_value;
3446   enum rtx_code comparison_code;
3447   HOST_WIDE_INT abs_inc;
3448   unsigned HOST_WIDE_INT abs_diff;
3449   int off_by_one;
3450   int increment_dir;
3451   int unsigned_p, compare_dir, final_larger;
3452   rtx last_loop_insn;
3453   rtx reg_term;
3454   struct iv_class *bl;
3455
3456   loop_info->n_iterations = 0;
3457   loop_info->initial_value = 0;
3458   loop_info->initial_equiv_value = 0;
3459   loop_info->comparison_value = 0;
3460   loop_info->final_value = 0;
3461   loop_info->final_equiv_value = 0;
3462   loop_info->increment = 0;
3463   loop_info->iteration_var = 0;
3464   loop_info->unroll_number = 1;
3465   loop_info->iv = 0;
3466
3467   /* We used to use prev_nonnote_insn here, but that fails because it might
3468      accidentally get the branch for a contained loop if the branch for this
3469      loop was deleted.  We can only trust branches immediately before the
3470      loop_end.  */
3471   last_loop_insn = PREV_INSN (loop->end);
3472
3473   /* ??? We should probably try harder to find the jump insn
3474      at the end of the loop.  The following code assumes that
3475      the last loop insn is a jump to the top of the loop.  */
3476   if (GET_CODE (last_loop_insn) != JUMP_INSN)
3477     {
3478       if (loop_dump_stream)
3479         fprintf (loop_dump_stream,
3480                  "Loop iterations: No final conditional branch found.\n");
3481       return 0;
3482     }
3483
3484   /* If there is a more than a single jump to the top of the loop
3485      we cannot (easily) determine the iteration count.  */
3486   if (LABEL_NUSES (JUMP_LABEL (last_loop_insn)) > 1)
3487     {
3488       if (loop_dump_stream)
3489         fprintf (loop_dump_stream,
3490                  "Loop iterations: Loop has multiple back edges.\n");
3491       return 0;
3492     }
3493
3494   /* Find the iteration variable.  If the last insn is a conditional
3495      branch, and the insn before tests a register value, make that the
3496      iteration variable.  */
3497
3498   comparison = get_condition_for_loop (loop, last_loop_insn);
3499   if (comparison == 0)
3500     {
3501       if (loop_dump_stream)
3502         fprintf (loop_dump_stream,
3503                  "Loop iterations: No final comparison found.\n");
3504       return 0;
3505     }
3506
3507   /* ??? Get_condition may switch position of induction variable and
3508      invariant register when it canonicalizes the comparison.  */
3509
3510   comparison_code = GET_CODE (comparison);
3511   iteration_var = XEXP (comparison, 0);
3512   comparison_value = XEXP (comparison, 1);
3513
3514   if (GET_CODE (iteration_var) != REG)
3515     {
3516       if (loop_dump_stream)
3517         fprintf (loop_dump_stream,
3518                  "Loop iterations: Comparison not against register.\n");
3519       return 0;
3520     }
3521
3522   /* The only new registers that are created before loop iterations
3523      are givs made from biv increments or registers created by
3524      load_mems.  In the latter case, it is possible that try_copy_prop
3525      will propagate a new pseudo into the old iteration register but
3526      this will be marked by having the REG_USERVAR_P bit set.  */
3527
3528   if ((unsigned) REGNO (iteration_var) >= ivs->n_regs
3529       && ! REG_USERVAR_P (iteration_var))
3530     abort ();
3531
3532   /* Determine the initial value of the iteration variable, and the amount
3533      that it is incremented each loop.  Use the tables constructed by
3534      the strength reduction pass to calculate these values.  */
3535
3536   /* Clear the result values, in case no answer can be found.  */
3537   initial_value = 0;
3538   increment = 0;
3539
3540   /* The iteration variable can be either a giv or a biv.  Check to see
3541      which it is, and compute the variable's initial value, and increment
3542      value if possible.  */
3543
3544   /* If this is a new register, can't handle it since we don't have any
3545      reg_iv_type entry for it.  */
3546   if ((unsigned) REGNO (iteration_var) >= ivs->n_regs)
3547     {
3548       if (loop_dump_stream)
3549         fprintf (loop_dump_stream,
3550                  "Loop iterations: No reg_iv_type entry for iteration var.\n");
3551       return 0;
3552     }
3553
3554   /* Reject iteration variables larger than the host wide int size, since they
3555      could result in a number of iterations greater than the range of our
3556      `unsigned HOST_WIDE_INT' variable loop_info->n_iterations.  */
3557   else if ((GET_MODE_BITSIZE (GET_MODE (iteration_var))
3558             > HOST_BITS_PER_WIDE_INT))
3559     {
3560       if (loop_dump_stream)
3561         fprintf (loop_dump_stream,
3562                  "Loop iterations: Iteration var rejected because mode too large.\n");
3563       return 0;
3564     }
3565   else if (GET_MODE_CLASS (GET_MODE (iteration_var)) != MODE_INT)
3566     {
3567       if (loop_dump_stream)
3568         fprintf (loop_dump_stream,
3569                  "Loop iterations: Iteration var not an integer.\n");
3570       return 0;
3571     }
3572   else if (REG_IV_TYPE (ivs, REGNO (iteration_var)) == BASIC_INDUCT)
3573     {
3574       if (REGNO (iteration_var) >= ivs->n_regs)
3575         abort ();
3576
3577       /* Grab initial value, only useful if it is a constant.  */
3578       bl = REG_IV_CLASS (ivs, REGNO (iteration_var));
3579       initial_value = bl->initial_value;
3580       if (!bl->biv->always_executed || bl->biv->maybe_multiple)
3581         {
3582           if (loop_dump_stream)
3583             fprintf (loop_dump_stream,
3584                      "Loop iterations: Basic induction var not set once in each iteration.\n");
3585           return 0;
3586         }
3587
3588       increment = biv_total_increment (bl);
3589     }
3590   else if (REG_IV_TYPE (ivs, REGNO (iteration_var)) == GENERAL_INDUCT)
3591     {
3592       HOST_WIDE_INT offset = 0;
3593       struct induction *v = REG_IV_INFO (ivs, REGNO (iteration_var));
3594       rtx biv_initial_value;
3595
3596       if (REGNO (v->src_reg) >= ivs->n_regs)
3597         abort ();
3598
3599       if (!v->always_executed || v->maybe_multiple)
3600         {
3601           if (loop_dump_stream)
3602             fprintf (loop_dump_stream,
3603                      "Loop iterations: General induction var not set once in each iteration.\n");
3604           return 0;
3605         }
3606
3607       bl = REG_IV_CLASS (ivs, REGNO (v->src_reg));
3608
3609       /* Increment value is mult_val times the increment value of the biv.  */
3610
3611       increment = biv_total_increment (bl);
3612       if (increment)
3613         {
3614           struct induction *biv_inc;
3615
3616           increment = fold_rtx_mult_add (v->mult_val,
3617                                          extend_value_for_giv (v, increment),
3618                                          const0_rtx, v->mode);
3619           /* The caller assumes that one full increment has occured at the
3620              first loop test.  But that's not true when the biv is incremented
3621              after the giv is set (which is the usual case), e.g.:
3622              i = 6; do {;} while (i++ < 9) .
3623              Therefore, we bias the initial value by subtracting the amount of
3624              the increment that occurs between the giv set and the giv test.  */
3625           for (biv_inc = bl->biv; biv_inc; biv_inc = biv_inc->next_iv)
3626             {
3627               if (loop_insn_first_p (v->insn, biv_inc->insn))
3628                 offset -= INTVAL (biv_inc->add_val);
3629             }
3630           offset *= INTVAL (v->mult_val);
3631         }
3632       if (loop_dump_stream)
3633         fprintf (loop_dump_stream,
3634                  "Loop iterations: Giv iterator, initial value bias %ld.\n",
3635                  (long) offset);
3636
3637       /* Initial value is mult_val times the biv's initial value plus
3638          add_val.  Only useful if it is a constant.  */
3639       biv_initial_value = extend_value_for_giv (v, bl->initial_value);
3640       initial_value
3641         = fold_rtx_mult_add (v->mult_val,
3642                              plus_constant (biv_initial_value, offset),
3643                              v->add_val, v->mode);
3644     }
3645   else
3646     {
3647       if (loop_dump_stream)
3648         fprintf (loop_dump_stream,
3649                  "Loop iterations: Not basic or general induction var.\n");
3650       return 0;
3651     }
3652
3653   if (initial_value == 0)
3654     return 0;
3655
3656   unsigned_p = 0;
3657   off_by_one = 0;
3658   switch (comparison_code)
3659     {
3660     case LEU:
3661       unsigned_p = 1;
3662     case LE:
3663       compare_dir = 1;
3664       off_by_one = 1;
3665       break;
3666     case GEU:
3667       unsigned_p = 1;
3668     case GE:
3669       compare_dir = -1;
3670       off_by_one = -1;
3671       break;
3672     case EQ:
3673       /* Cannot determine loop iterations with this case.  */
3674       compare_dir = 0;
3675       break;
3676     case LTU:
3677       unsigned_p = 1;
3678     case LT:
3679       compare_dir = 1;
3680       break;
3681     case GTU:
3682       unsigned_p = 1;
3683     case GT:
3684       compare_dir = -1;
3685     case NE:
3686       compare_dir = 0;
3687       break;
3688     default:
3689       abort ();
3690     }
3691
3692   /* If the comparison value is an invariant register, then try to find
3693      its value from the insns before the start of the loop.  */
3694
3695   final_value = comparison_value;
3696   if (GET_CODE (comparison_value) == REG
3697       && loop_invariant_p (loop, comparison_value))
3698     {
3699       final_value = loop_find_equiv_value (loop, comparison_value);
3700
3701       /* If we don't get an invariant final value, we are better
3702          off with the original register.  */
3703       if (! loop_invariant_p (loop, final_value))
3704         final_value = comparison_value;
3705     }
3706
3707   /* Calculate the approximate final value of the induction variable
3708      (on the last successful iteration).  The exact final value
3709      depends on the branch operator, and increment sign.  It will be
3710      wrong if the iteration variable is not incremented by one each
3711      time through the loop and (comparison_value + off_by_one -
3712      initial_value) % increment != 0.
3713      ??? Note that the final_value may overflow and thus final_larger
3714      will be bogus.  A potentially infinite loop will be classified
3715      as immediate, e.g. for (i = 0x7ffffff0; i <= 0x7fffffff; i++)  */
3716   if (off_by_one)
3717     final_value = plus_constant (final_value, off_by_one);
3718
3719   /* Save the calculated values describing this loop's bounds, in case
3720      precondition_loop_p will need them later.  These values can not be
3721      recalculated inside precondition_loop_p because strength reduction
3722      optimizations may obscure the loop's structure.
3723
3724      These values are only required by precondition_loop_p and insert_bct
3725      whenever the number of iterations cannot be computed at compile time.
3726      Only the difference between final_value and initial_value is
3727      important.  Note that final_value is only approximate.  */
3728   loop_info->initial_value = initial_value;
3729   loop_info->comparison_value = comparison_value;
3730   loop_info->final_value = plus_constant (comparison_value, off_by_one);
3731   loop_info->increment = increment;
3732   loop_info->iteration_var = iteration_var;
3733   loop_info->comparison_code = comparison_code;
3734   loop_info->iv = bl;
3735
3736   /* Try to determine the iteration count for loops such
3737      as (for i = init; i < init + const; i++).  When running the
3738      loop optimization twice, the first pass often converts simple
3739      loops into this form.  */
3740
3741   if (REG_P (initial_value))
3742     {
3743       rtx reg1;
3744       rtx reg2;
3745       rtx const2;
3746
3747       reg1 = initial_value;
3748       if (GET_CODE (final_value) == PLUS)
3749         reg2 = XEXP (final_value, 0), const2 = XEXP (final_value, 1);
3750       else
3751         reg2 = final_value, const2 = const0_rtx;
3752
3753       /* Check for initial_value = reg1, final_value = reg2 + const2,
3754          where reg1 != reg2.  */
3755       if (REG_P (reg2) && reg2 != reg1)
3756         {
3757           rtx temp;
3758
3759           /* Find what reg1 is equivalent to.  Hopefully it will
3760              either be reg2 or reg2 plus a constant.  */
3761           temp = loop_find_equiv_value (loop, reg1);
3762
3763           if (find_common_reg_term (temp, reg2))
3764             initial_value = temp;
3765           else
3766             {
3767               /* Find what reg2 is equivalent to.  Hopefully it will
3768                  either be reg1 or reg1 plus a constant.  Let's ignore
3769                  the latter case for now since it is not so common.  */
3770               temp = loop_find_equiv_value (loop, reg2);
3771
3772               if (temp == loop_info->iteration_var)
3773                 temp = initial_value;
3774               if (temp == reg1)
3775                 final_value = (const2 == const0_rtx)
3776                   ? reg1 : gen_rtx_PLUS (GET_MODE (reg1), reg1, const2);
3777             }
3778         }
3779       else if (loop->vtop && GET_CODE (reg2) == CONST_INT)
3780         {
3781           rtx temp;
3782
3783           /* When running the loop optimizer twice, check_dbra_loop
3784              further obfuscates reversible loops of the form:
3785              for (i = init; i < init + const; i++).  We often end up with
3786              final_value = 0, initial_value = temp, temp = temp2 - init,
3787              where temp2 = init + const.  If the loop has a vtop we
3788              can replace initial_value with const.  */
3789
3790           temp = loop_find_equiv_value (loop, reg1);
3791
3792           if (GET_CODE (temp) == MINUS && REG_P (XEXP (temp, 0)))
3793             {
3794               rtx temp2 = loop_find_equiv_value (loop, XEXP (temp, 0));
3795
3796               if (GET_CODE (temp2) == PLUS
3797                   && XEXP (temp2, 0) == XEXP (temp, 1))
3798                 initial_value = XEXP (temp2, 1);
3799             }
3800         }
3801     }
3802
3803   /* If have initial_value = reg + const1 and final_value = reg +
3804      const2, then replace initial_value with const1 and final_value
3805      with const2.  This should be safe since we are protected by the
3806      initial comparison before entering the loop if we have a vtop.
3807      For example, a + b < a + c is not equivalent to b < c for all a
3808      when using modulo arithmetic.
3809
3810      ??? Without a vtop we could still perform the optimization if we check
3811      the initial and final values carefully.  */
3812   if (loop->vtop
3813       && (reg_term = find_common_reg_term (initial_value, final_value)))
3814     {
3815       initial_value = subtract_reg_term (initial_value, reg_term);
3816       final_value = subtract_reg_term (final_value, reg_term);
3817     }
3818
3819   loop_info->initial_equiv_value = initial_value;
3820   loop_info->final_equiv_value = final_value;
3821
3822   /* For EQ comparison loops, we don't have a valid final value.
3823      Check this now so that we won't leave an invalid value if we
3824      return early for any other reason.  */
3825   if (comparison_code == EQ)
3826     loop_info->final_equiv_value = loop_info->final_value = 0;
3827
3828   if (increment == 0)
3829     {
3830       if (loop_dump_stream)
3831         fprintf (loop_dump_stream,
3832                  "Loop iterations: Increment value can't be calculated.\n");
3833       return 0;
3834     }
3835
3836   if (GET_CODE (increment) != CONST_INT)
3837     {
3838       /* If we have a REG, check to see if REG holds a constant value.  */
3839       /* ??? Other RTL, such as (neg (reg)) is possible here, but it isn't
3840          clear if it is worthwhile to try to handle such RTL.  */
3841       if (GET_CODE (increment) == REG || GET_CODE (increment) == SUBREG)
3842         increment = loop_find_equiv_value (loop, increment);
3843
3844       if (GET_CODE (increment) != CONST_INT)
3845         {
3846           if (loop_dump_stream)
3847             {
3848               fprintf (loop_dump_stream,
3849                        "Loop iterations: Increment value not constant ");
3850               print_simple_rtl (loop_dump_stream, increment);
3851               fprintf (loop_dump_stream, ".\n");
3852             }
3853           return 0;
3854         }
3855       loop_info->increment = increment;
3856     }
3857
3858   if (GET_CODE (initial_value) != CONST_INT)
3859     {
3860       if (loop_dump_stream)
3861         {
3862           fprintf (loop_dump_stream,
3863                    "Loop iterations: Initial value not constant ");
3864           print_simple_rtl (loop_dump_stream, initial_value);
3865           fprintf (loop_dump_stream, ".\n");
3866         }
3867       return 0;
3868     }
3869   else if (comparison_code == EQ)
3870     {
3871       if (loop_dump_stream)
3872         fprintf (loop_dump_stream, "Loop iterations: EQ comparison loop.\n");
3873       return 0;
3874     }
3875   else if (GET_CODE (final_value) != CONST_INT)
3876     {
3877       if (loop_dump_stream)
3878         {
3879           fprintf (loop_dump_stream,
3880                    "Loop iterations: Final value not constant ");
3881           print_simple_rtl (loop_dump_stream, final_value);
3882           fprintf (loop_dump_stream, ".\n");
3883         }
3884       return 0;
3885     }
3886
3887   /* Final_larger is 1 if final larger, 0 if they are equal, otherwise -1.  */
3888   if (unsigned_p)
3889     final_larger
3890       = ((unsigned HOST_WIDE_INT) INTVAL (final_value)
3891          > (unsigned HOST_WIDE_INT) INTVAL (initial_value))
3892         - ((unsigned HOST_WIDE_INT) INTVAL (final_value)
3893            < (unsigned HOST_WIDE_INT) INTVAL (initial_value));
3894   else
3895     final_larger = (INTVAL (final_value) > INTVAL (initial_value))
3896       - (INTVAL (final_value) < INTVAL (initial_value));
3897
3898   if (INTVAL (increment) > 0)
3899     increment_dir = 1;
3900   else if (INTVAL (increment) == 0)
3901     increment_dir = 0;
3902   else
3903     increment_dir = -1;
3904
3905   /* There are 27 different cases: compare_dir = -1, 0, 1;
3906      final_larger = -1, 0, 1; increment_dir = -1, 0, 1.
3907      There are 4 normal cases, 4 reverse cases (where the iteration variable
3908      will overflow before the loop exits), 4 infinite loop cases, and 15
3909      immediate exit (0 or 1 iteration depending on loop type) cases.
3910      Only try to optimize the normal cases.  */
3911
3912   /* (compare_dir/final_larger/increment_dir)
3913      Normal cases: (0/-1/-1), (0/1/1), (-1/-1/-1), (1/1/1)
3914      Reverse cases: (0/-1/1), (0/1/-1), (-1/-1/1), (1/1/-1)
3915      Infinite loops: (0/-1/0), (0/1/0), (-1/-1/0), (1/1/0)
3916      Immediate exit: (0/0/X), (-1/0/X), (-1/1/X), (1/0/X), (1/-1/X) */
3917
3918   /* ?? If the meaning of reverse loops (where the iteration variable
3919      will overflow before the loop exits) is undefined, then could
3920      eliminate all of these special checks, and just always assume
3921      the loops are normal/immediate/infinite.  Note that this means
3922      the sign of increment_dir does not have to be known.  Also,
3923      since it does not really hurt if immediate exit loops or infinite loops
3924      are optimized, then that case could be ignored also, and hence all
3925      loops can be optimized.
3926
3927      According to ANSI Spec, the reverse loop case result is undefined,
3928      because the action on overflow is undefined.
3929
3930      See also the special test for NE loops below.  */
3931
3932   if (final_larger == increment_dir && final_larger != 0
3933       && (final_larger == compare_dir || compare_dir == 0))
3934     /* Normal case.  */
3935     ;
3936   else
3937     {
3938       if (loop_dump_stream)
3939         fprintf (loop_dump_stream, "Loop iterations: Not normal loop.\n");
3940       return 0;
3941     }
3942
3943   /* Calculate the number of iterations, final_value is only an approximation,
3944      so correct for that.  Note that abs_diff and n_iterations are
3945      unsigned, because they can be as large as 2^n - 1.  */
3946
3947   abs_inc = INTVAL (increment);
3948   if (abs_inc > 0)
3949     abs_diff = INTVAL (final_value) - INTVAL (initial_value);
3950   else if (abs_inc < 0)
3951     {
3952       abs_diff = INTVAL (initial_value) - INTVAL (final_value);
3953       abs_inc = -abs_inc;
3954     }
3955   else
3956     abort ();
3957
3958   /* For NE tests, make sure that the iteration variable won't miss
3959      the final value.  If abs_diff mod abs_incr is not zero, then the
3960      iteration variable will overflow before the loop exits, and we
3961      can not calculate the number of iterations.  */
3962   if (compare_dir == 0 && (abs_diff % abs_inc) != 0)
3963     return 0;
3964
3965   /* Note that the number of iterations could be calculated using
3966      (abs_diff + abs_inc - 1) / abs_inc, provided care was taken to
3967      handle potential overflow of the summation.  */
3968   loop_info->n_iterations = abs_diff / abs_inc + ((abs_diff % abs_inc) != 0);
3969   return loop_info->n_iterations;
3970 }
3971
3972 /* Replace uses of split bivs with their split pseudo register.  This is
3973    for original instructions which remain after loop unrolling without
3974    copying.  */
3975
3976 static rtx
3977 remap_split_bivs (loop, x)
3978      struct loop *loop;
3979      rtx x;
3980 {
3981   struct loop_ivs *ivs = LOOP_IVS (loop);
3982   register enum rtx_code code;
3983   register int i;
3984   register const char *fmt;
3985
3986   if (x == 0)
3987     return x;
3988
3989   code = GET_CODE (x);
3990   switch (code)
3991     {
3992     case SCRATCH:
3993     case PC:
3994     case CC0:
3995     case CONST_INT:
3996     case CONST_DOUBLE:
3997     case CONST:
3998     case SYMBOL_REF:
3999     case LABEL_REF:
4000       return x;
4001
4002     case REG:
4003 #if 0
4004       /* If non-reduced/final-value givs were split, then this would also
4005          have to remap those givs also.  */
4006 #endif
4007       if (REGNO (x) < ivs->n_regs
4008           && REG_IV_TYPE (ivs, REGNO (x)) == BASIC_INDUCT)
4009         return REG_IV_CLASS (ivs, REGNO (x))->biv->src_reg;
4010       break;
4011
4012     default:
4013       break;
4014     }
4015
4016   fmt = GET_RTX_FORMAT (code);
4017   for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--)
4018     {
4019       if (fmt[i] == 'e')
4020         XEXP (x, i) = remap_split_bivs (loop, XEXP (x, i));
4021       else if (fmt[i] == 'E')
4022         {
4023           register int j;
4024           for (j = 0; j < XVECLEN (x, i); j++)
4025             XVECEXP (x, i, j) = remap_split_bivs (loop, XVECEXP (x, i, j));
4026         }
4027     }
4028   return x;
4029 }
4030
4031 /* If FIRST_UID is a set of REGNO, and FIRST_UID dominates LAST_UID (e.g.
4032    FIST_UID is always executed if LAST_UID is), then return 1.  Otherwise
4033    return 0.  COPY_START is where we can start looking for the insns
4034    FIRST_UID and LAST_UID.  COPY_END is where we stop looking for these
4035    insns.
4036
4037    If there is no JUMP_INSN between LOOP_START and FIRST_UID, then FIRST_UID
4038    must dominate LAST_UID.
4039
4040    If there is a CODE_LABEL between FIRST_UID and LAST_UID, then FIRST_UID
4041    may not dominate LAST_UID.
4042
4043    If there is no CODE_LABEL between FIRST_UID and LAST_UID, then FIRST_UID
4044    must dominate LAST_UID.  */
4045
4046 int
4047 set_dominates_use (regno, first_uid, last_uid, copy_start, copy_end)
4048      int regno;
4049      int first_uid;
4050      int last_uid;
4051      rtx copy_start;
4052      rtx copy_end;
4053 {
4054   int passed_jump = 0;
4055   rtx p = NEXT_INSN (copy_start);
4056
4057   while (INSN_UID (p) != first_uid)
4058     {
4059       if (GET_CODE (p) == JUMP_INSN)
4060         passed_jump = 1;
4061       /* Could not find FIRST_UID.  */
4062       if (p == copy_end)
4063         return 0;
4064       p = NEXT_INSN (p);
4065     }
4066
4067   /* Verify that FIRST_UID is an insn that entirely sets REGNO.  */
4068   if (! INSN_P (p) || ! dead_or_set_regno_p (p, regno))
4069     return 0;
4070
4071   /* FIRST_UID is always executed.  */
4072   if (passed_jump == 0)
4073     return 1;
4074
4075   while (INSN_UID (p) != last_uid)
4076     {
4077       /* If we see a CODE_LABEL between FIRST_UID and LAST_UID, then we
4078          can not be sure that FIRST_UID dominates LAST_UID.  */
4079       if (GET_CODE (p) == CODE_LABEL)
4080         return 0;
4081       /* Could not find LAST_UID, but we reached the end of the loop, so
4082          it must be safe.  */
4083       else if (p == copy_end)
4084         return 1;
4085       p = NEXT_INSN (p);
4086     }
4087
4088   /* FIRST_UID is always executed if LAST_UID is executed.  */
4089   return 1;
4090 }
4091
4092 /* This routine is called when the number of iterations for the unrolled
4093    loop is one.   The goal is to identify a loop that begins with an
4094    unconditional branch to the loop continuation note (or a label just after).
4095    In this case, the unconditional branch that starts the loop needs to be
4096    deleted so that we execute the single iteration.  */
4097
4098 static rtx
4099 ujump_to_loop_cont (loop_start, loop_cont)
4100      rtx loop_start;
4101      rtx loop_cont;
4102 {
4103   rtx x, label, label_ref;
4104
4105   /* See if loop start, or the next insn is an unconditional jump.  */
4106   loop_start = next_nonnote_insn (loop_start);
4107
4108   x = pc_set (loop_start);
4109   if (!x)
4110     return NULL_RTX;
4111
4112   label_ref = SET_SRC (x);
4113   if (!label_ref)
4114     return NULL_RTX;
4115
4116   /* Examine insn after loop continuation note.  Return if not a label.  */
4117   label = next_nonnote_insn (loop_cont);
4118   if (label == 0 || GET_CODE (label) != CODE_LABEL)
4119     return NULL_RTX;
4120
4121   /* Return the loop start if the branch label matches the code label.  */
4122   if (CODE_LABEL_NUMBER (label) == CODE_LABEL_NUMBER (XEXP (label_ref, 0)))
4123     return loop_start;
4124   else
4125     return NULL_RTX;
4126 }