OSDN Git Service

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