OSDN Git Service

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