OSDN Git Service

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