OSDN Git Service

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