OSDN Git Service

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