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