OSDN Git Service

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