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