OSDN Git Service

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