OSDN Git Service

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