OSDN Git Service

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