OSDN Git Service

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