OSDN Git Service

gcc/fortran:
[pf3gnuchains/gcc-fork.git] / gcc / reg-stack.c
1 /* Register to Stack convert for GNU compiler.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007 
4    Free Software Foundation, Inc.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but WITHOUT
14    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16    License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GCC; see the file COPYING3.  If not see
20    <http://www.gnu.org/licenses/>.  */
21
22 /* This pass converts stack-like registers from the "flat register
23    file" model that gcc uses, to a stack convention that the 387 uses.
24
25    * The form of the input:
26
27    On input, the function consists of insn that have had their
28    registers fully allocated to a set of "virtual" registers.  Note that
29    the word "virtual" is used differently here than elsewhere in gcc: for
30    each virtual stack reg, there is a hard reg, but the mapping between
31    them is not known until this pass is run.  On output, hard register
32    numbers have been substituted, and various pop and exchange insns have
33    been emitted.  The hard register numbers and the virtual register
34    numbers completely overlap - before this pass, all stack register
35    numbers are virtual, and afterward they are all hard.
36
37    The virtual registers can be manipulated normally by gcc, and their
38    semantics are the same as for normal registers.  After the hard
39    register numbers are substituted, the semantics of an insn containing
40    stack-like regs are not the same as for an insn with normal regs: for
41    instance, it is not safe to delete an insn that appears to be a no-op
42    move.  In general, no insn containing hard regs should be changed
43    after this pass is done.
44
45    * The form of the output:
46
47    After this pass, hard register numbers represent the distance from
48    the current top of stack to the desired register.  A reference to
49    FIRST_STACK_REG references the top of stack, FIRST_STACK_REG + 1,
50    represents the register just below that, and so forth.  Also, REG_DEAD
51    notes indicate whether or not a stack register should be popped.
52
53    A "swap" insn looks like a parallel of two patterns, where each
54    pattern is a SET: one sets A to B, the other B to A.
55
56    A "push" or "load" insn is a SET whose SET_DEST is FIRST_STACK_REG
57    and whose SET_DEST is REG or MEM.  Any other SET_DEST, such as PLUS,
58    will replace the existing stack top, not push a new value.
59
60    A store insn is a SET whose SET_DEST is FIRST_STACK_REG, and whose
61    SET_SRC is REG or MEM.
62
63    The case where the SET_SRC and SET_DEST are both FIRST_STACK_REG
64    appears ambiguous.  As a special case, the presence of a REG_DEAD note
65    for FIRST_STACK_REG differentiates between a load insn and a pop.
66
67    If a REG_DEAD is present, the insn represents a "pop" that discards
68    the top of the register stack.  If there is no REG_DEAD note, then the
69    insn represents a "dup" or a push of the current top of stack onto the
70    stack.
71
72    * Methodology:
73
74    Existing REG_DEAD and REG_UNUSED notes for stack registers are
75    deleted and recreated from scratch.  REG_DEAD is never created for a
76    SET_DEST, only REG_UNUSED.
77
78    * asm_operands:
79
80    There are several rules on the usage of stack-like regs in
81    asm_operands insns.  These rules apply only to the operands that are
82    stack-like regs:
83
84    1. Given a set of input regs that die in an asm_operands, it is
85       necessary to know which are implicitly popped by the asm, and
86       which must be explicitly popped by gcc.
87
88         An input reg that is implicitly popped by the asm must be
89         explicitly clobbered, unless it is constrained to match an
90         output operand.
91
92    2. For any input reg that is implicitly popped by an asm, it is
93       necessary to know how to adjust the stack to compensate for the pop.
94       If any non-popped input is closer to the top of the reg-stack than
95       the implicitly popped reg, it would not be possible to know what the
96       stack looked like - it's not clear how the rest of the stack "slides
97       up".
98
99         All implicitly popped input regs must be closer to the top of
100         the reg-stack than any input that is not implicitly popped.
101
102    3. It is possible that if an input dies in an insn, reload might
103       use the input reg for an output reload.  Consider this example:
104
105                 asm ("foo" : "=t" (a) : "f" (b));
106
107       This asm says that input B is not popped by the asm, and that
108       the asm pushes a result onto the reg-stack, i.e., the stack is one
109       deeper after the asm than it was before.  But, it is possible that
110       reload will think that it can use the same reg for both the input and
111       the output, if input B dies in this insn.
112
113         If any input operand uses the "f" constraint, all output reg
114         constraints must use the "&" earlyclobber.
115
116       The asm above would be written as
117
118                 asm ("foo" : "=&t" (a) : "f" (b));
119
120    4. Some operands need to be in particular places on the stack.  All
121       output operands fall in this category - there is no other way to
122       know which regs the outputs appear in unless the user indicates
123       this in the constraints.
124
125         Output operands must specifically indicate which reg an output
126         appears in after an asm.  "=f" is not allowed: the operand
127         constraints must select a class with a single reg.
128
129    5. Output operands may not be "inserted" between existing stack regs.
130       Since no 387 opcode uses a read/write operand, all output operands
131       are dead before the asm_operands, and are pushed by the asm_operands.
132       It makes no sense to push anywhere but the top of the reg-stack.
133
134         Output operands must start at the top of the reg-stack: output
135         operands may not "skip" a reg.
136
137    6. Some asm statements may need extra stack space for internal
138       calculations.  This can be guaranteed by clobbering stack registers
139       unrelated to the inputs and outputs.
140
141    Here are a couple of reasonable asms to want to write.  This asm
142    takes one input, which is internally popped, and produces two outputs.
143
144         asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
145
146    This asm takes two inputs, which are popped by the fyl2xp1 opcode,
147    and replaces them with one output.  The user must code the "st(1)"
148    clobber for reg-stack.c to know that fyl2xp1 pops both inputs.
149
150         asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
151
152 */
153 \f
154 #include "config.h"
155 #include "system.h"
156 #include "coretypes.h"
157 #include "tm.h"
158 #include "tree.h"
159 #include "rtl.h"
160 #include "tm_p.h"
161 #include "function.h"
162 #include "insn-config.h"
163 #include "regs.h"
164 #include "hard-reg-set.h"
165 #include "flags.h"
166 #include "toplev.h"
167 #include "recog.h"
168 #include "output.h"
169 #include "basic-block.h"
170 #include "cfglayout.h"
171 #include "varray.h"
172 #include "reload.h"
173 #include "ggc.h"
174 #include "timevar.h"
175 #include "tree-pass.h"
176 #include "target.h"
177 #include "df.h"
178 #include "vecprim.h"
179
180 #ifdef STACK_REGS
181
182 /* We use this array to cache info about insns, because otherwise we
183    spend too much time in stack_regs_mentioned_p.
184
185    Indexed by insn UIDs.  A value of zero is uninitialized, one indicates
186    the insn uses stack registers, two indicates the insn does not use
187    stack registers.  */
188 static VEC(char,heap) *stack_regs_mentioned_data;
189
190 #define REG_STACK_SIZE (LAST_STACK_REG - FIRST_STACK_REG + 1)
191
192 int regstack_completed = 0;
193
194 /* This is the basic stack record.  TOP is an index into REG[] such
195    that REG[TOP] is the top of stack.  If TOP is -1 the stack is empty.
196
197    If TOP is -2, REG[] is not yet initialized.  Stack initialization
198    consists of placing each live reg in array `reg' and setting `top'
199    appropriately.
200
201    REG_SET indicates which registers are live.  */
202
203 typedef struct stack_def
204 {
205   int top;                      /* index to top stack element */
206   HARD_REG_SET reg_set;         /* set of live registers */
207   unsigned char reg[REG_STACK_SIZE];/* register - stack mapping */
208 } *stack;
209
210 /* This is used to carry information about basic blocks.  It is
211    attached to the AUX field of the standard CFG block.  */
212
213 typedef struct block_info_def
214 {
215   struct stack_def stack_in;    /* Input stack configuration.  */
216   struct stack_def stack_out;   /* Output stack configuration.  */
217   HARD_REG_SET out_reg_set;     /* Stack regs live on output.  */
218   int done;                     /* True if block already converted.  */
219   int predecessors;             /* Number of predecessors that need
220                                    to be visited.  */
221 } *block_info;
222
223 #define BLOCK_INFO(B)   ((block_info) (B)->aux)
224
225 /* Passed to change_stack to indicate where to emit insns.  */
226 enum emit_where
227 {
228   EMIT_AFTER,
229   EMIT_BEFORE
230 };
231
232 /* The block we're currently working on.  */
233 static basic_block current_block;
234
235 /* In the current_block, whether we're processing the first register
236    stack or call instruction, i.e. the regstack is currently the
237    same as BLOCK_INFO(current_block)->stack_in.  */
238 static bool starting_stack_p;
239
240 /* This is the register file for all register after conversion.  */
241 static rtx
242   FP_mode_reg[LAST_STACK_REG+1-FIRST_STACK_REG][(int) MAX_MACHINE_MODE];
243
244 #define FP_MODE_REG(regno,mode) \
245   (FP_mode_reg[(regno)-FIRST_STACK_REG][(int) (mode)])
246
247 /* Used to initialize uninitialized registers.  */
248 static rtx not_a_num;
249
250 /* Forward declarations */
251
252 static int stack_regs_mentioned_p (const_rtx pat);
253 static void pop_stack (stack, int);
254 static rtx *get_true_reg (rtx *);
255
256 static int check_asm_stack_operands (rtx);
257 static int get_asm_operand_n_inputs (rtx);
258 static rtx stack_result (tree);
259 static void replace_reg (rtx *, int);
260 static void remove_regno_note (rtx, enum reg_note, unsigned int);
261 static int get_hard_regnum (stack, rtx);
262 static rtx emit_pop_insn (rtx, stack, rtx, enum emit_where);
263 static void swap_to_top(rtx, stack, rtx, rtx);
264 static bool move_for_stack_reg (rtx, stack, rtx);
265 static bool move_nan_for_stack_reg (rtx, stack, rtx);
266 static int swap_rtx_condition_1 (rtx);
267 static int swap_rtx_condition (rtx);
268 static void compare_for_stack_reg (rtx, stack, rtx);
269 static bool subst_stack_regs_pat (rtx, stack, rtx);
270 static void subst_asm_stack_regs (rtx, stack);
271 static bool subst_stack_regs (rtx, stack);
272 static void change_stack (rtx, stack, stack, enum emit_where);
273 static void print_stack (FILE *, stack);
274 static rtx next_flags_user (rtx);
275 \f
276 /* Return nonzero if any stack register is mentioned somewhere within PAT.  */
277
278 static int
279 stack_regs_mentioned_p (const_rtx pat)
280 {
281   const char *fmt;
282   int i;
283
284   if (STACK_REG_P (pat))
285     return 1;
286
287   fmt = GET_RTX_FORMAT (GET_CODE (pat));
288   for (i = GET_RTX_LENGTH (GET_CODE (pat)) - 1; i >= 0; i--)
289     {
290       if (fmt[i] == 'E')
291         {
292           int j;
293
294           for (j = XVECLEN (pat, i) - 1; j >= 0; j--)
295             if (stack_regs_mentioned_p (XVECEXP (pat, i, j)))
296               return 1;
297         }
298       else if (fmt[i] == 'e' && stack_regs_mentioned_p (XEXP (pat, i)))
299         return 1;
300     }
301
302   return 0;
303 }
304
305 /* Return nonzero if INSN mentions stacked registers, else return zero.  */
306
307 int
308 stack_regs_mentioned (const_rtx insn)
309 {
310   unsigned int uid, max;
311   int test;
312
313   if (! INSN_P (insn) || !stack_regs_mentioned_data)
314     return 0;
315
316   uid = INSN_UID (insn);
317   max = VEC_length (char, stack_regs_mentioned_data);
318   if (uid >= max)
319     {
320       /* Allocate some extra size to avoid too many reallocs, but
321          do not grow too quickly.  */
322       max = uid + uid / 20 + 1;
323       VEC_safe_grow_cleared (char, heap, stack_regs_mentioned_data, max);
324     }
325
326   test = VEC_index (char, stack_regs_mentioned_data, uid);
327   if (test == 0)
328     {
329       /* This insn has yet to be examined.  Do so now.  */
330       test = stack_regs_mentioned_p (PATTERN (insn)) ? 1 : 2;
331       VEC_replace (char, stack_regs_mentioned_data, uid, test);
332     }
333
334   return test == 1;
335 }
336 \f
337 static rtx ix86_flags_rtx;
338
339 static rtx
340 next_flags_user (rtx insn)
341 {
342   /* Search forward looking for the first use of this value.
343      Stop at block boundaries.  */
344
345   while (insn != BB_END (current_block))
346     {
347       insn = NEXT_INSN (insn);
348
349       if (INSN_P (insn) && reg_mentioned_p (ix86_flags_rtx, PATTERN (insn)))
350         return insn;
351
352       if (CALL_P (insn))
353         return NULL_RTX;
354     }
355   return NULL_RTX;
356 }
357 \f
358 /* Reorganize the stack into ascending numbers, before this insn.  */
359
360 static void
361 straighten_stack (rtx insn, stack regstack)
362 {
363   struct stack_def temp_stack;
364   int top;
365
366   /* If there is only a single register on the stack, then the stack is
367      already in increasing order and no reorganization is needed.
368
369      Similarly if the stack is empty.  */
370   if (regstack->top <= 0)
371     return;
372
373   COPY_HARD_REG_SET (temp_stack.reg_set, regstack->reg_set);
374
375   for (top = temp_stack.top = regstack->top; top >= 0; top--)
376     temp_stack.reg[top] = FIRST_STACK_REG + temp_stack.top - top;
377
378   change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
379 }
380
381 /* Pop a register from the stack.  */
382
383 static void
384 pop_stack (stack regstack, int regno)
385 {
386   int top = regstack->top;
387
388   CLEAR_HARD_REG_BIT (regstack->reg_set, regno);
389   regstack->top--;
390   /* If regno was not at the top of stack then adjust stack.  */
391   if (regstack->reg [top] != regno)
392     {
393       int i;
394       for (i = regstack->top; i >= 0; i--)
395         if (regstack->reg [i] == regno)
396           {
397             int j;
398             for (j = i; j < top; j++)
399               regstack->reg [j] = regstack->reg [j + 1];
400             break;
401           }
402     }
403 }
404 \f
405 /* Return a pointer to the REG expression within PAT.  If PAT is not a
406    REG, possible enclosed by a conversion rtx, return the inner part of
407    PAT that stopped the search.  */
408
409 static rtx *
410 get_true_reg (rtx *pat)
411 {
412   for (;;)
413     switch (GET_CODE (*pat))
414       {
415       case SUBREG:
416         /* Eliminate FP subregister accesses in favor of the
417            actual FP register in use.  */
418         {
419           rtx subreg;
420           if (FP_REG_P (subreg = SUBREG_REG (*pat)))
421             {
422               int regno_off = subreg_regno_offset (REGNO (subreg),
423                                                    GET_MODE (subreg),
424                                                    SUBREG_BYTE (*pat),
425                                                    GET_MODE (*pat));
426               *pat = FP_MODE_REG (REGNO (subreg) + regno_off,
427                                   GET_MODE (subreg));
428               return pat;
429             }
430         }
431       case FLOAT:
432       case FIX:
433       case FLOAT_EXTEND:
434         pat = & XEXP (*pat, 0);
435         break;
436
437       case UNSPEC:
438         if (XINT (*pat, 1) == UNSPEC_TRUNC_NOOP)
439           pat = & XVECEXP (*pat, 0, 0);
440         return pat;
441
442       case FLOAT_TRUNCATE:
443         if (!flag_unsafe_math_optimizations)
444           return pat;
445         pat = & XEXP (*pat, 0);
446         break;
447
448       default:
449         return pat;
450       }
451 }
452 \f
453 /* Set if we find any malformed asms in a block.  */
454 static bool any_malformed_asm;
455
456 /* There are many rules that an asm statement for stack-like regs must
457    follow.  Those rules are explained at the top of this file: the rule
458    numbers below refer to that explanation.  */
459
460 static int
461 check_asm_stack_operands (rtx insn)
462 {
463   int i;
464   int n_clobbers;
465   int malformed_asm = 0;
466   rtx body = PATTERN (insn);
467
468   char reg_used_as_output[FIRST_PSEUDO_REGISTER];
469   char implicitly_dies[FIRST_PSEUDO_REGISTER];
470   int alt;
471
472   rtx *clobber_reg = 0;
473   int n_inputs, n_outputs;
474
475   /* Find out what the constraints require.  If no constraint
476      alternative matches, this asm is malformed.  */
477   extract_insn (insn);
478   constrain_operands (1);
479   alt = which_alternative;
480
481   preprocess_constraints ();
482
483   n_inputs = get_asm_operand_n_inputs (body);
484   n_outputs = recog_data.n_operands - n_inputs;
485
486   if (alt < 0)
487     {
488       malformed_asm = 1;
489       /* Avoid further trouble with this insn.  */
490       PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
491       return 0;
492     }
493
494   /* Strip SUBREGs here to make the following code simpler.  */
495   for (i = 0; i < recog_data.n_operands; i++)
496     if (GET_CODE (recog_data.operand[i]) == SUBREG
497         && REG_P (SUBREG_REG (recog_data.operand[i])))
498       recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]);
499
500   /* Set up CLOBBER_REG.  */
501
502   n_clobbers = 0;
503
504   if (GET_CODE (body) == PARALLEL)
505     {
506       clobber_reg = alloca (XVECLEN (body, 0) * sizeof (rtx));
507
508       for (i = 0; i < XVECLEN (body, 0); i++)
509         if (GET_CODE (XVECEXP (body, 0, i)) == CLOBBER)
510           {
511             rtx clobber = XVECEXP (body, 0, i);
512             rtx reg = XEXP (clobber, 0);
513
514             if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
515               reg = SUBREG_REG (reg);
516
517             if (STACK_REG_P (reg))
518               {
519                 clobber_reg[n_clobbers] = reg;
520                 n_clobbers++;
521               }
522           }
523     }
524
525   /* Enforce rule #4: Output operands must specifically indicate which
526      reg an output appears in after an asm.  "=f" is not allowed: the
527      operand constraints must select a class with a single reg.
528
529      Also enforce rule #5: Output operands must start at the top of
530      the reg-stack: output operands may not "skip" a reg.  */
531
532   memset (reg_used_as_output, 0, sizeof (reg_used_as_output));
533   for (i = 0; i < n_outputs; i++)
534     if (STACK_REG_P (recog_data.operand[i]))
535       {
536         if (reg_class_size[(int) recog_op_alt[i][alt].cl] != 1)
537           {
538             error_for_asm (insn, "output constraint %d must specify a single register", i);
539             malformed_asm = 1;
540           }
541         else
542           {
543             int j;
544
545             for (j = 0; j < n_clobbers; j++)
546               if (REGNO (recog_data.operand[i]) == REGNO (clobber_reg[j]))
547                 {
548                   error_for_asm (insn, "output constraint %d cannot be specified together with \"%s\" clobber",
549                                  i, reg_names [REGNO (clobber_reg[j])]);
550                   malformed_asm = 1;
551                   break;
552                 }
553             if (j == n_clobbers)
554               reg_used_as_output[REGNO (recog_data.operand[i])] = 1;
555           }
556       }
557
558
559   /* Search for first non-popped reg.  */
560   for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++)
561     if (! reg_used_as_output[i])
562       break;
563
564   /* If there are any other popped regs, that's an error.  */
565   for (; i < LAST_STACK_REG + 1; i++)
566     if (reg_used_as_output[i])
567       break;
568
569   if (i != LAST_STACK_REG + 1)
570     {
571       error_for_asm (insn, "output regs must be grouped at top of stack");
572       malformed_asm = 1;
573     }
574
575   /* Enforce rule #2: All implicitly popped input regs must be closer
576      to the top of the reg-stack than any input that is not implicitly
577      popped.  */
578
579   memset (implicitly_dies, 0, sizeof (implicitly_dies));
580   for (i = n_outputs; i < n_outputs + n_inputs; i++)
581     if (STACK_REG_P (recog_data.operand[i]))
582       {
583         /* An input reg is implicitly popped if it is tied to an
584            output, or if there is a CLOBBER for it.  */
585         int j;
586
587         for (j = 0; j < n_clobbers; j++)
588           if (operands_match_p (clobber_reg[j], recog_data.operand[i]))
589             break;
590
591         if (j < n_clobbers || recog_op_alt[i][alt].matches >= 0)
592           implicitly_dies[REGNO (recog_data.operand[i])] = 1;
593       }
594
595   /* Search for first non-popped reg.  */
596   for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++)
597     if (! implicitly_dies[i])
598       break;
599
600   /* If there are any other popped regs, that's an error.  */
601   for (; i < LAST_STACK_REG + 1; i++)
602     if (implicitly_dies[i])
603       break;
604
605   if (i != LAST_STACK_REG + 1)
606     {
607       error_for_asm (insn,
608                      "implicitly popped regs must be grouped at top of stack");
609       malformed_asm = 1;
610     }
611
612   /* Enforce rule #3: If any input operand uses the "f" constraint, all
613      output constraints must use the "&" earlyclobber.
614
615      ??? Detect this more deterministically by having constrain_asm_operands
616      record any earlyclobber.  */
617
618   for (i = n_outputs; i < n_outputs + n_inputs; i++)
619     if (recog_op_alt[i][alt].matches == -1)
620       {
621         int j;
622
623         for (j = 0; j < n_outputs; j++)
624           if (operands_match_p (recog_data.operand[j], recog_data.operand[i]))
625             {
626               error_for_asm (insn,
627                              "output operand %d must use %<&%> constraint", j);
628               malformed_asm = 1;
629             }
630       }
631
632   if (malformed_asm)
633     {
634       /* Avoid further trouble with this insn.  */
635       PATTERN (insn) = gen_rtx_USE (VOIDmode, const0_rtx);
636       any_malformed_asm = true;
637       return 0;
638     }
639
640   return 1;
641 }
642 \f
643 /* Calculate the number of inputs and outputs in BODY, an
644    asm_operands.  N_OPERANDS is the total number of operands, and
645    N_INPUTS and N_OUTPUTS are pointers to ints into which the results are
646    placed.  */
647
648 static int
649 get_asm_operand_n_inputs (rtx body)
650 {
651   switch (GET_CODE (body))
652     {
653     case SET:
654       gcc_assert (GET_CODE (SET_SRC (body)) == ASM_OPERANDS);
655       return ASM_OPERANDS_INPUT_LENGTH (SET_SRC (body));
656       
657     case ASM_OPERANDS:
658       return ASM_OPERANDS_INPUT_LENGTH (body);
659       
660     case PARALLEL:
661       return get_asm_operand_n_inputs (XVECEXP (body, 0, 0));
662       
663     default:
664       gcc_unreachable ();
665     }
666 }
667
668 /* If current function returns its result in an fp stack register,
669    return the REG.  Otherwise, return 0.  */
670
671 static rtx
672 stack_result (tree decl)
673 {
674   rtx result;
675
676   /* If the value is supposed to be returned in memory, then clearly
677      it is not returned in a stack register.  */
678   if (aggregate_value_p (DECL_RESULT (decl), decl))
679     return 0;
680
681   result = DECL_RTL_IF_SET (DECL_RESULT (decl));
682   if (result != 0)
683     result = targetm.calls.function_value (TREE_TYPE (DECL_RESULT (decl)),
684                                            decl, true);
685
686   return result != 0 && STACK_REG_P (result) ? result : 0;
687 }
688 \f
689
690 /*
691  * This section deals with stack register substitution, and forms the second
692  * pass over the RTL.
693  */
694
695 /* Replace REG, which is a pointer to a stack reg RTX, with an RTX for
696    the desired hard REGNO.  */
697
698 static void
699 replace_reg (rtx *reg, int regno)
700 {
701   gcc_assert (IN_RANGE (regno, FIRST_STACK_REG, LAST_STACK_REG));
702   gcc_assert (STACK_REG_P (*reg));
703
704   gcc_assert (SCALAR_FLOAT_MODE_P (GET_MODE (*reg))
705               || GET_MODE_CLASS (GET_MODE (*reg)) == MODE_COMPLEX_FLOAT);
706
707   *reg = FP_MODE_REG (regno, GET_MODE (*reg));
708 }
709
710 /* Remove a note of type NOTE, which must be found, for register
711    number REGNO from INSN.  Remove only one such note.  */
712
713 static void
714 remove_regno_note (rtx insn, enum reg_note note, unsigned int regno)
715 {
716   rtx *note_link, this;
717
718   note_link = &REG_NOTES (insn);
719   for (this = *note_link; this; this = XEXP (this, 1))
720     if (REG_NOTE_KIND (this) == note
721         && REG_P (XEXP (this, 0)) && REGNO (XEXP (this, 0)) == regno)
722       {
723         *note_link = XEXP (this, 1);
724         return;
725       }
726     else
727       note_link = &XEXP (this, 1);
728
729   gcc_unreachable ();
730 }
731
732 /* Find the hard register number of virtual register REG in REGSTACK.
733    The hard register number is relative to the top of the stack.  -1 is
734    returned if the register is not found.  */
735
736 static int
737 get_hard_regnum (stack regstack, rtx reg)
738 {
739   int i;
740
741   gcc_assert (STACK_REG_P (reg));
742
743   for (i = regstack->top; i >= 0; i--)
744     if (regstack->reg[i] == REGNO (reg))
745       break;
746
747   return i >= 0 ? (FIRST_STACK_REG + regstack->top - i) : -1;
748 }
749 \f
750 /* Emit an insn to pop virtual register REG before or after INSN.
751    REGSTACK is the stack state after INSN and is updated to reflect this
752    pop.  WHEN is either emit_insn_before or emit_insn_after.  A pop insn
753    is represented as a SET whose destination is the register to be popped
754    and source is the top of stack.  A death note for the top of stack
755    cases the movdf pattern to pop.  */
756
757 static rtx
758 emit_pop_insn (rtx insn, stack regstack, rtx reg, enum emit_where where)
759 {
760   rtx pop_insn, pop_rtx;
761   int hard_regno;
762
763   /* For complex types take care to pop both halves.  These may survive in
764      CLOBBER and USE expressions.  */
765   if (COMPLEX_MODE_P (GET_MODE (reg)))
766     {
767       rtx reg1 = FP_MODE_REG (REGNO (reg), DFmode);
768       rtx reg2 = FP_MODE_REG (REGNO (reg) + 1, DFmode);
769
770       pop_insn = NULL_RTX;
771       if (get_hard_regnum (regstack, reg1) >= 0)
772         pop_insn = emit_pop_insn (insn, regstack, reg1, where);
773       if (get_hard_regnum (regstack, reg2) >= 0)
774         pop_insn = emit_pop_insn (insn, regstack, reg2, where);
775       gcc_assert (pop_insn);
776       return pop_insn;
777     }
778
779   hard_regno = get_hard_regnum (regstack, reg);
780
781   gcc_assert (hard_regno >= FIRST_STACK_REG);
782
783   pop_rtx = gen_rtx_SET (VOIDmode, FP_MODE_REG (hard_regno, DFmode),
784                          FP_MODE_REG (FIRST_STACK_REG, DFmode));
785
786   if (where == EMIT_AFTER)
787     pop_insn = emit_insn_after (pop_rtx, insn);
788   else
789     pop_insn = emit_insn_before (pop_rtx, insn);
790
791   REG_NOTES (pop_insn)
792     = gen_rtx_EXPR_LIST (REG_DEAD, FP_MODE_REG (FIRST_STACK_REG, DFmode),
793                          REG_NOTES (pop_insn));
794
795   regstack->reg[regstack->top - (hard_regno - FIRST_STACK_REG)]
796     = regstack->reg[regstack->top];
797   regstack->top -= 1;
798   CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (reg));
799
800   return pop_insn;
801 }
802 \f
803 /* Emit an insn before or after INSN to swap virtual register REG with
804    the top of stack.  REGSTACK is the stack state before the swap, and
805    is updated to reflect the swap.  A swap insn is represented as a
806    PARALLEL of two patterns: each pattern moves one reg to the other.
807
808    If REG is already at the top of the stack, no insn is emitted.  */
809
810 static void
811 emit_swap_insn (rtx insn, stack regstack, rtx reg)
812 {
813   int hard_regno;
814   rtx swap_rtx;
815   int tmp, other_reg;           /* swap regno temps */
816   rtx i1;                       /* the stack-reg insn prior to INSN */
817   rtx i1set = NULL_RTX;         /* the SET rtx within I1 */
818
819   hard_regno = get_hard_regnum (regstack, reg);
820
821   if (hard_regno == FIRST_STACK_REG)
822     return;
823   if (hard_regno == -1)
824     {
825       /* Something failed if the register wasn't on the stack.  If we had
826          malformed asms, we zapped the instruction itself, but that didn't
827          produce the same pattern of register sets as before.  To prevent
828          further failure, adjust REGSTACK to include REG at TOP.  */
829       gcc_assert (any_malformed_asm);
830       regstack->reg[++regstack->top] = REGNO (reg);
831       return;
832     }
833   gcc_assert (hard_regno >= FIRST_STACK_REG);
834
835   other_reg = regstack->top - (hard_regno - FIRST_STACK_REG);
836
837   tmp = regstack->reg[other_reg];
838   regstack->reg[other_reg] = regstack->reg[regstack->top];
839   regstack->reg[regstack->top] = tmp;
840
841   /* Find the previous insn involving stack regs, but don't pass a
842      block boundary.  */
843   i1 = NULL;
844   if (current_block && insn != BB_HEAD (current_block))
845     {
846       rtx tmp = PREV_INSN (insn);
847       rtx limit = PREV_INSN (BB_HEAD (current_block));
848       while (tmp != limit)
849         {
850           if (LABEL_P (tmp)
851               || CALL_P (tmp)
852               || NOTE_INSN_BASIC_BLOCK_P (tmp)
853               || (NONJUMP_INSN_P (tmp)
854                   && stack_regs_mentioned (tmp)))
855             {
856               i1 = tmp;
857               break;
858             }
859           tmp = PREV_INSN (tmp);
860         }
861     }
862
863   if (i1 != NULL_RTX
864       && (i1set = single_set (i1)) != NULL_RTX)
865     {
866       rtx i1src = *get_true_reg (&SET_SRC (i1set));
867       rtx i1dest = *get_true_reg (&SET_DEST (i1set));
868
869       /* If the previous register stack push was from the reg we are to
870          swap with, omit the swap.  */
871
872       if (REG_P (i1dest) && REGNO (i1dest) == FIRST_STACK_REG
873           && REG_P (i1src)
874           && REGNO (i1src) == (unsigned) hard_regno - 1
875           && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX)
876         return;
877
878       /* If the previous insn wrote to the reg we are to swap with,
879          omit the swap.  */
880
881       if (REG_P (i1dest) && REGNO (i1dest) == (unsigned) hard_regno
882           && REG_P (i1src) && REGNO (i1src) == FIRST_STACK_REG
883           && find_regno_note (i1, REG_DEAD, FIRST_STACK_REG) == NULL_RTX)
884         return;
885     }
886
887   /* Avoid emitting the swap if this is the first register stack insn
888      of the current_block.  Instead update the current_block's stack_in
889      and let compensate edges take care of this for us.  */
890   if (current_block && starting_stack_p)
891     {
892       BLOCK_INFO (current_block)->stack_in = *regstack;
893       starting_stack_p = false;
894       return;
895     }
896
897   swap_rtx = gen_swapxf (FP_MODE_REG (hard_regno, XFmode),
898                          FP_MODE_REG (FIRST_STACK_REG, XFmode));
899
900   if (i1)
901     emit_insn_after (swap_rtx, i1);
902   else if (current_block)
903     emit_insn_before (swap_rtx, BB_HEAD (current_block));
904   else
905     emit_insn_before (swap_rtx, insn);
906 }
907 \f
908 /* Emit an insns before INSN to swap virtual register SRC1 with
909    the top of stack and virtual register SRC2 with second stack
910    slot. REGSTACK is the stack state before the swaps, and
911    is updated to reflect the swaps.  A swap insn is represented as a
912    PARALLEL of two patterns: each pattern moves one reg to the other.
913
914    If SRC1 and/or SRC2 are already at the right place, no swap insn
915    is emitted.  */
916
917 static void
918 swap_to_top (rtx insn, stack regstack, rtx src1, rtx src2)
919 {
920   struct stack_def temp_stack;
921   int regno, j, k, temp;
922
923   temp_stack = *regstack;
924
925   /* Place operand 1 at the top of stack.  */
926   regno = get_hard_regnum (&temp_stack, src1);
927   gcc_assert (regno >= 0);
928   if (regno != FIRST_STACK_REG)
929     {
930       k = temp_stack.top - (regno - FIRST_STACK_REG);
931       j = temp_stack.top;
932
933       temp = temp_stack.reg[k];
934       temp_stack.reg[k] = temp_stack.reg[j];
935       temp_stack.reg[j] = temp;
936     }
937
938   /* Place operand 2 next on the stack.  */
939   regno = get_hard_regnum (&temp_stack, src2);
940   gcc_assert (regno >= 0);
941   if (regno != FIRST_STACK_REG + 1)
942     {
943       k = temp_stack.top - (regno - FIRST_STACK_REG);
944       j = temp_stack.top - 1;
945
946       temp = temp_stack.reg[k];
947       temp_stack.reg[k] = temp_stack.reg[j];
948       temp_stack.reg[j] = temp;
949     }
950
951   change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
952 }
953 \f
954 /* Handle a move to or from a stack register in PAT, which is in INSN.
955    REGSTACK is the current stack.  Return whether a control flow insn
956    was deleted in the process.  */
957
958 static bool
959 move_for_stack_reg (rtx insn, stack regstack, rtx pat)
960 {
961   rtx *psrc =  get_true_reg (&SET_SRC (pat));
962   rtx *pdest = get_true_reg (&SET_DEST (pat));
963   rtx src, dest;
964   rtx note;
965   bool control_flow_insn_deleted = false;
966
967   src = *psrc; dest = *pdest;
968
969   if (STACK_REG_P (src) && STACK_REG_P (dest))
970     {
971       /* Write from one stack reg to another.  If SRC dies here, then
972          just change the register mapping and delete the insn.  */
973
974       note = find_regno_note (insn, REG_DEAD, REGNO (src));
975       if (note)
976         {
977           int i;
978
979           /* If this is a no-op move, there must not be a REG_DEAD note.  */
980           gcc_assert (REGNO (src) != REGNO (dest));
981
982           for (i = regstack->top; i >= 0; i--)
983             if (regstack->reg[i] == REGNO (src))
984               break;
985
986           /* The destination must be dead, or life analysis is borked.  */
987           gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG);
988
989           /* If the source is not live, this is yet another case of
990              uninitialized variables.  Load up a NaN instead.  */
991           if (i < 0)
992             return move_nan_for_stack_reg (insn, regstack, dest);
993
994           /* It is possible that the dest is unused after this insn.
995              If so, just pop the src.  */
996
997           if (find_regno_note (insn, REG_UNUSED, REGNO (dest)))
998             emit_pop_insn (insn, regstack, src, EMIT_AFTER);
999           else
1000             {
1001               regstack->reg[i] = REGNO (dest);
1002               SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest));
1003               CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src));
1004             }
1005
1006           control_flow_insn_deleted |= control_flow_insn_p (insn);
1007           delete_insn (insn);
1008           return control_flow_insn_deleted;
1009         }
1010
1011       /* The source reg does not die.  */
1012
1013       /* If this appears to be a no-op move, delete it, or else it
1014          will confuse the machine description output patterns. But if
1015          it is REG_UNUSED, we must pop the reg now, as per-insn processing
1016          for REG_UNUSED will not work for deleted insns.  */
1017
1018       if (REGNO (src) == REGNO (dest))
1019         {
1020           if (find_regno_note (insn, REG_UNUSED, REGNO (dest)))
1021             emit_pop_insn (insn, regstack, dest, EMIT_AFTER);
1022
1023           control_flow_insn_deleted |= control_flow_insn_p (insn);
1024           delete_insn (insn);
1025           return control_flow_insn_deleted;
1026         }
1027
1028       /* The destination ought to be dead.  */
1029       gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG);
1030
1031       replace_reg (psrc, get_hard_regnum (regstack, src));
1032
1033       regstack->reg[++regstack->top] = REGNO (dest);
1034       SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest));
1035       replace_reg (pdest, FIRST_STACK_REG);
1036     }
1037   else if (STACK_REG_P (src))
1038     {
1039       /* Save from a stack reg to MEM, or possibly integer reg.  Since
1040          only top of stack may be saved, emit an exchange first if
1041          needs be.  */
1042
1043       emit_swap_insn (insn, regstack, src);
1044
1045       note = find_regno_note (insn, REG_DEAD, REGNO (src));
1046       if (note)
1047         {
1048           replace_reg (&XEXP (note, 0), FIRST_STACK_REG);
1049           regstack->top--;
1050           CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (src));
1051         }
1052       else if ((GET_MODE (src) == XFmode)
1053                && regstack->top < REG_STACK_SIZE - 1)
1054         {
1055           /* A 387 cannot write an XFmode value to a MEM without
1056              clobbering the source reg.  The output code can handle
1057              this by reading back the value from the MEM.
1058              But it is more efficient to use a temp register if one is
1059              available.  Push the source value here if the register
1060              stack is not full, and then write the value to memory via
1061              a pop.  */
1062           rtx push_rtx;
1063           rtx top_stack_reg = FP_MODE_REG (FIRST_STACK_REG, GET_MODE (src));
1064
1065           push_rtx = gen_movxf (top_stack_reg, top_stack_reg);
1066           emit_insn_before (push_rtx, insn);
1067           REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_DEAD, top_stack_reg,
1068                                                 REG_NOTES (insn));
1069         }
1070
1071       replace_reg (psrc, FIRST_STACK_REG);
1072     }
1073   else
1074     {
1075       rtx pat = PATTERN (insn);
1076
1077       gcc_assert (STACK_REG_P (dest));
1078
1079       /* Load from MEM, or possibly integer REG or constant, into the
1080          stack regs.  The actual target is always the top of the
1081          stack. The stack mapping is changed to reflect that DEST is
1082          now at top of stack.  */
1083
1084       /* The destination ought to be dead.  However, there is a
1085          special case with i387 UNSPEC_TAN, where destination is live
1086          (an argument to fptan) but inherent load of 1.0 is modelled
1087          as a load from a constant.  */
1088       if (GET_CODE (pat) == PARALLEL
1089           && XVECLEN (pat, 0) == 2
1090           && GET_CODE (XVECEXP (pat, 0, 1)) == SET
1091           && GET_CODE (SET_SRC (XVECEXP (pat, 0, 1))) == UNSPEC
1092           && XINT (SET_SRC (XVECEXP (pat, 0, 1)), 1) == UNSPEC_TAN)
1093         emit_swap_insn (insn, regstack, dest);
1094       else
1095         gcc_assert (get_hard_regnum (regstack, dest) < FIRST_STACK_REG);
1096
1097       gcc_assert (regstack->top < REG_STACK_SIZE);
1098
1099       regstack->reg[++regstack->top] = REGNO (dest);
1100       SET_HARD_REG_BIT (regstack->reg_set, REGNO (dest));
1101       replace_reg (pdest, FIRST_STACK_REG);
1102     }
1103
1104   return control_flow_insn_deleted;
1105 }
1106
1107 /* A helper function which replaces INSN with a pattern that loads up
1108    a NaN into DEST, then invokes move_for_stack_reg.  */
1109
1110 static bool
1111 move_nan_for_stack_reg (rtx insn, stack regstack, rtx dest)
1112 {
1113   rtx pat;
1114
1115   dest = FP_MODE_REG (REGNO (dest), SFmode);
1116   pat = gen_rtx_SET (VOIDmode, dest, not_a_num);
1117   PATTERN (insn) = pat;
1118   INSN_CODE (insn) = -1;
1119
1120   return move_for_stack_reg (insn, regstack, pat);
1121 }
1122 \f
1123 /* Swap the condition on a branch, if there is one.  Return true if we
1124    found a condition to swap.  False if the condition was not used as
1125    such.  */
1126
1127 static int
1128 swap_rtx_condition_1 (rtx pat)
1129 {
1130   const char *fmt;
1131   int i, r = 0;
1132
1133   if (COMPARISON_P (pat))
1134     {
1135       PUT_CODE (pat, swap_condition (GET_CODE (pat)));
1136       r = 1;
1137     }
1138   else
1139     {
1140       fmt = GET_RTX_FORMAT (GET_CODE (pat));
1141       for (i = GET_RTX_LENGTH (GET_CODE (pat)) - 1; i >= 0; i--)
1142         {
1143           if (fmt[i] == 'E')
1144             {
1145               int j;
1146
1147               for (j = XVECLEN (pat, i) - 1; j >= 0; j--)
1148                 r |= swap_rtx_condition_1 (XVECEXP (pat, i, j));
1149             }
1150           else if (fmt[i] == 'e')
1151             r |= swap_rtx_condition_1 (XEXP (pat, i));
1152         }
1153     }
1154
1155   return r;
1156 }
1157
1158 static int
1159 swap_rtx_condition (rtx insn)
1160 {
1161   rtx pat = PATTERN (insn);
1162
1163   /* We're looking for a single set to cc0 or an HImode temporary.  */
1164
1165   if (GET_CODE (pat) == SET
1166       && REG_P (SET_DEST (pat))
1167       && REGNO (SET_DEST (pat)) == FLAGS_REG)
1168     {
1169       insn = next_flags_user (insn);
1170       if (insn == NULL_RTX)
1171         return 0;
1172       pat = PATTERN (insn);
1173     }
1174
1175   /* See if this is, or ends in, a fnstsw.  If so, we're not doing anything
1176      with the cc value right now.  We may be able to search for one
1177      though.  */
1178
1179   if (GET_CODE (pat) == SET
1180       && GET_CODE (SET_SRC (pat)) == UNSPEC
1181       && XINT (SET_SRC (pat), 1) == UNSPEC_FNSTSW)
1182     {
1183       rtx dest = SET_DEST (pat);
1184
1185       /* Search forward looking for the first use of this value.
1186          Stop at block boundaries.  */
1187       while (insn != BB_END (current_block))
1188         {
1189           insn = NEXT_INSN (insn);
1190           if (INSN_P (insn) && reg_mentioned_p (dest, insn))
1191             break;
1192           if (CALL_P (insn))
1193             return 0;
1194         }
1195
1196       /* We haven't found it.  */
1197       if (insn == BB_END (current_block))
1198         return 0;
1199
1200       /* So we've found the insn using this value.  If it is anything
1201          other than sahf or the value does not die (meaning we'd have
1202          to search further), then we must give up.  */
1203       pat = PATTERN (insn);
1204       if (GET_CODE (pat) != SET
1205           || GET_CODE (SET_SRC (pat)) != UNSPEC
1206           || XINT (SET_SRC (pat), 1) != UNSPEC_SAHF
1207           || ! dead_or_set_p (insn, dest))
1208         return 0;
1209
1210       /* Now we are prepared to handle this as a normal cc0 setter.  */
1211       insn = next_flags_user (insn);
1212       if (insn == NULL_RTX)
1213         return 0;
1214       pat = PATTERN (insn);
1215     }
1216
1217   if (swap_rtx_condition_1 (pat))
1218     {
1219       int fail = 0;
1220       INSN_CODE (insn) = -1;
1221       if (recog_memoized (insn) == -1)
1222         fail = 1;
1223       /* In case the flags don't die here, recurse to try fix
1224          following user too.  */
1225       else if (! dead_or_set_p (insn, ix86_flags_rtx))
1226         {
1227           insn = next_flags_user (insn);
1228           if (!insn || !swap_rtx_condition (insn))
1229             fail = 1;
1230         }
1231       if (fail)
1232         {
1233           swap_rtx_condition_1 (pat);
1234           return 0;
1235         }
1236       return 1;
1237     }
1238   return 0;
1239 }
1240
1241 /* Handle a comparison.  Special care needs to be taken to avoid
1242    causing comparisons that a 387 cannot do correctly, such as EQ.
1243
1244    Also, a pop insn may need to be emitted.  The 387 does have an
1245    `fcompp' insn that can pop two regs, but it is sometimes too expensive
1246    to do this - a `fcomp' followed by a `fstpl %st(0)' may be easier to
1247    set up.  */
1248
1249 static void
1250 compare_for_stack_reg (rtx insn, stack regstack, rtx pat_src)
1251 {
1252   rtx *src1, *src2;
1253   rtx src1_note, src2_note;
1254
1255   src1 = get_true_reg (&XEXP (pat_src, 0));
1256   src2 = get_true_reg (&XEXP (pat_src, 1));
1257
1258   /* ??? If fxch turns out to be cheaper than fstp, give priority to
1259      registers that die in this insn - move those to stack top first.  */
1260   if ((! STACK_REG_P (*src1)
1261        || (STACK_REG_P (*src2)
1262            && get_hard_regnum (regstack, *src2) == FIRST_STACK_REG))
1263       && swap_rtx_condition (insn))
1264     {
1265       rtx temp;
1266       temp = XEXP (pat_src, 0);
1267       XEXP (pat_src, 0) = XEXP (pat_src, 1);
1268       XEXP (pat_src, 1) = temp;
1269
1270       src1 = get_true_reg (&XEXP (pat_src, 0));
1271       src2 = get_true_reg (&XEXP (pat_src, 1));
1272
1273       INSN_CODE (insn) = -1;
1274     }
1275
1276   /* We will fix any death note later.  */
1277
1278   src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1279
1280   if (STACK_REG_P (*src2))
1281     src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1282   else
1283     src2_note = NULL_RTX;
1284
1285   emit_swap_insn (insn, regstack, *src1);
1286
1287   replace_reg (src1, FIRST_STACK_REG);
1288
1289   if (STACK_REG_P (*src2))
1290     replace_reg (src2, get_hard_regnum (regstack, *src2));
1291
1292   if (src1_note)
1293     {
1294       pop_stack (regstack, REGNO (XEXP (src1_note, 0)));
1295       replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1296     }
1297
1298   /* If the second operand dies, handle that.  But if the operands are
1299      the same stack register, don't bother, because only one death is
1300      needed, and it was just handled.  */
1301
1302   if (src2_note
1303       && ! (STACK_REG_P (*src1) && STACK_REG_P (*src2)
1304             && REGNO (*src1) == REGNO (*src2)))
1305     {
1306       /* As a special case, two regs may die in this insn if src2 is
1307          next to top of stack and the top of stack also dies.  Since
1308          we have already popped src1, "next to top of stack" is really
1309          at top (FIRST_STACK_REG) now.  */
1310
1311       if (get_hard_regnum (regstack, XEXP (src2_note, 0)) == FIRST_STACK_REG
1312           && src1_note)
1313         {
1314           pop_stack (regstack, REGNO (XEXP (src2_note, 0)));
1315           replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG + 1);
1316         }
1317       else
1318         {
1319           /* The 386 can only represent death of the first operand in
1320              the case handled above.  In all other cases, emit a separate
1321              pop and remove the death note from here.  */
1322
1323           /* link_cc0_insns (insn); */
1324
1325           remove_regno_note (insn, REG_DEAD, REGNO (XEXP (src2_note, 0)));
1326
1327           emit_pop_insn (insn, regstack, XEXP (src2_note, 0),
1328                          EMIT_AFTER);
1329         }
1330     }
1331 }
1332 \f
1333 /* Substitute new registers in PAT, which is part of INSN.  REGSTACK
1334    is the current register layout.  Return whether a control flow insn
1335    was deleted in the process.  */
1336
1337 static bool
1338 subst_stack_regs_pat (rtx insn, stack regstack, rtx pat)
1339 {
1340   rtx *dest, *src;
1341   bool control_flow_insn_deleted = false;
1342
1343   switch (GET_CODE (pat))
1344     {
1345     case USE:
1346       /* Deaths in USE insns can happen in non optimizing compilation.
1347          Handle them by popping the dying register.  */
1348       src = get_true_reg (&XEXP (pat, 0));
1349       if (STACK_REG_P (*src)
1350           && find_regno_note (insn, REG_DEAD, REGNO (*src)))
1351         {
1352           /* USEs are ignored for liveness information so USEs of dead
1353              register might happen.  */
1354           if (TEST_HARD_REG_BIT (regstack->reg_set, REGNO (*src)))
1355             emit_pop_insn (insn, regstack, *src, EMIT_AFTER);
1356           return control_flow_insn_deleted;
1357         }
1358       /* Uninitialized USE might happen for functions returning uninitialized
1359          value.  We will properly initialize the USE on the edge to EXIT_BLOCK,
1360          so it is safe to ignore the use here. This is consistent with behavior
1361          of dataflow analyzer that ignores USE too.  (This also imply that 
1362          forcibly initializing the register to NaN here would lead to ICE later,
1363          since the REG_DEAD notes are not issued.)  */
1364       break;
1365
1366     case CLOBBER:
1367       {
1368         rtx note;
1369
1370         dest = get_true_reg (&XEXP (pat, 0));
1371         if (STACK_REG_P (*dest))
1372           {
1373             note = find_reg_note (insn, REG_DEAD, *dest);
1374
1375             if (pat != PATTERN (insn))
1376               {
1377                 /* The fix_truncdi_1 pattern wants to be able to allocate
1378                    its own scratch register.  It does this by clobbering
1379                    an fp reg so that it is assured of an empty reg-stack
1380                    register.  If the register is live, kill it now.
1381                    Remove the DEAD/UNUSED note so we don't try to kill it
1382                    later too.  */
1383
1384                 if (note)
1385                   emit_pop_insn (insn, regstack, *dest, EMIT_BEFORE);
1386                 else
1387                   {
1388                     note = find_reg_note (insn, REG_UNUSED, *dest);
1389                     gcc_assert (note);
1390                   }
1391                 remove_note (insn, note);
1392                 replace_reg (dest, FIRST_STACK_REG + 1);
1393               }
1394             else
1395               {
1396                 /* A top-level clobber with no REG_DEAD, and no hard-regnum
1397                    indicates an uninitialized value.  Because reload removed
1398                    all other clobbers, this must be due to a function
1399                    returning without a value.  Load up a NaN.  */
1400
1401                 if (!note)
1402                   {
1403                     rtx t = *dest;
1404                     if (COMPLEX_MODE_P (GET_MODE (t)))
1405                       {
1406                         rtx u = FP_MODE_REG (REGNO (t) + 1, SFmode);
1407                         if (get_hard_regnum (regstack, u) == -1)
1408                           {
1409                             rtx pat2 = gen_rtx_CLOBBER (VOIDmode, u);
1410                             rtx insn2 = emit_insn_before (pat2, insn);
1411                             control_flow_insn_deleted
1412                               |= move_nan_for_stack_reg (insn2, regstack, u);
1413                           }
1414                       }
1415                     if (get_hard_regnum (regstack, t) == -1)
1416                       control_flow_insn_deleted
1417                         |= move_nan_for_stack_reg (insn, regstack, t);
1418                   }
1419               }
1420           }
1421         break;
1422       }
1423
1424     case SET:
1425       {
1426         rtx *src1 = (rtx *) 0, *src2;
1427         rtx src1_note, src2_note;
1428         rtx pat_src;
1429
1430         dest = get_true_reg (&SET_DEST (pat));
1431         src  = get_true_reg (&SET_SRC (pat));
1432         pat_src = SET_SRC (pat);
1433
1434         /* See if this is a `movM' pattern, and handle elsewhere if so.  */
1435         if (STACK_REG_P (*src)
1436             || (STACK_REG_P (*dest)
1437                 && (REG_P (*src) || MEM_P (*src)
1438                     || GET_CODE (*src) == CONST_DOUBLE)))
1439           {
1440             control_flow_insn_deleted |= move_for_stack_reg (insn, regstack, pat);
1441             break;
1442           }
1443
1444         switch (GET_CODE (pat_src))
1445           {
1446           case COMPARE:
1447             compare_for_stack_reg (insn, regstack, pat_src);
1448             break;
1449
1450           case CALL:
1451             {
1452               int count;
1453               for (count = hard_regno_nregs[REGNO (*dest)][GET_MODE (*dest)];
1454                    --count >= 0;)
1455                 {
1456                   regstack->reg[++regstack->top] = REGNO (*dest) + count;
1457                   SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest) + count);
1458                 }
1459             }
1460             replace_reg (dest, FIRST_STACK_REG);
1461             break;
1462
1463           case REG:
1464             /* This is a `tstM2' case.  */
1465             gcc_assert (*dest == cc0_rtx);
1466             src1 = src;
1467
1468             /* Fall through.  */
1469
1470           case FLOAT_TRUNCATE:
1471           case SQRT:
1472           case ABS:
1473           case NEG:
1474             /* These insns only operate on the top of the stack. DEST might
1475                be cc0_rtx if we're processing a tstM pattern. Also, it's
1476                possible that the tstM case results in a REG_DEAD note on the
1477                source.  */
1478
1479             if (src1 == 0)
1480               src1 = get_true_reg (&XEXP (pat_src, 0));
1481
1482             emit_swap_insn (insn, regstack, *src1);
1483
1484             src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1485
1486             if (STACK_REG_P (*dest))
1487               replace_reg (dest, FIRST_STACK_REG);
1488
1489             if (src1_note)
1490               {
1491                 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1492                 regstack->top--;
1493                 CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1));
1494               }
1495
1496             replace_reg (src1, FIRST_STACK_REG);
1497             break;
1498
1499           case MINUS:
1500           case DIV:
1501             /* On i386, reversed forms of subM3 and divM3 exist for
1502                MODE_FLOAT, so the same code that works for addM3 and mulM3
1503                can be used.  */
1504           case MULT:
1505           case PLUS:
1506             /* These insns can accept the top of stack as a destination
1507                from a stack reg or mem, or can use the top of stack as a
1508                source and some other stack register (possibly top of stack)
1509                as a destination.  */
1510
1511             src1 = get_true_reg (&XEXP (pat_src, 0));
1512             src2 = get_true_reg (&XEXP (pat_src, 1));
1513
1514             /* We will fix any death note later.  */
1515
1516             if (STACK_REG_P (*src1))
1517               src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1518             else
1519               src1_note = NULL_RTX;
1520             if (STACK_REG_P (*src2))
1521               src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1522             else
1523               src2_note = NULL_RTX;
1524
1525             /* If either operand is not a stack register, then the dest
1526                must be top of stack.  */
1527
1528             if (! STACK_REG_P (*src1) || ! STACK_REG_P (*src2))
1529               emit_swap_insn (insn, regstack, *dest);
1530             else
1531               {
1532                 /* Both operands are REG.  If neither operand is already
1533                    at the top of stack, choose to make the one that is the dest
1534                    the new top of stack.  */
1535
1536                 int src1_hard_regnum, src2_hard_regnum;
1537
1538                 src1_hard_regnum = get_hard_regnum (regstack, *src1);
1539                 src2_hard_regnum = get_hard_regnum (regstack, *src2);
1540                 gcc_assert (src1_hard_regnum != -1);
1541                 gcc_assert (src2_hard_regnum != -1);
1542
1543                 if (src1_hard_regnum != FIRST_STACK_REG
1544                     && src2_hard_regnum != FIRST_STACK_REG)
1545                   emit_swap_insn (insn, regstack, *dest);
1546               }
1547
1548             if (STACK_REG_P (*src1))
1549               replace_reg (src1, get_hard_regnum (regstack, *src1));
1550             if (STACK_REG_P (*src2))
1551               replace_reg (src2, get_hard_regnum (regstack, *src2));
1552
1553             if (src1_note)
1554               {
1555                 rtx src1_reg = XEXP (src1_note, 0);
1556
1557                 /* If the register that dies is at the top of stack, then
1558                    the destination is somewhere else - merely substitute it.
1559                    But if the reg that dies is not at top of stack, then
1560                    move the top of stack to the dead reg, as though we had
1561                    done the insn and then a store-with-pop.  */
1562
1563                 if (REGNO (src1_reg) == regstack->reg[regstack->top])
1564                   {
1565                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1566                     replace_reg (dest, get_hard_regnum (regstack, *dest));
1567                   }
1568                 else
1569                   {
1570                     int regno = get_hard_regnum (regstack, src1_reg);
1571
1572                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1573                     replace_reg (dest, regno);
1574
1575                     regstack->reg[regstack->top - (regno - FIRST_STACK_REG)]
1576                       = regstack->reg[regstack->top];
1577                   }
1578
1579                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1580                                     REGNO (XEXP (src1_note, 0)));
1581                 replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1582                 regstack->top--;
1583               }
1584             else if (src2_note)
1585               {
1586                 rtx src2_reg = XEXP (src2_note, 0);
1587                 if (REGNO (src2_reg) == regstack->reg[regstack->top])
1588                   {
1589                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1590                     replace_reg (dest, get_hard_regnum (regstack, *dest));
1591                   }
1592                 else
1593                   {
1594                     int regno = get_hard_regnum (regstack, src2_reg);
1595
1596                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1597                     replace_reg (dest, regno);
1598
1599                     regstack->reg[regstack->top - (regno - FIRST_STACK_REG)]
1600                       = regstack->reg[regstack->top];
1601                   }
1602
1603                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1604                                     REGNO (XEXP (src2_note, 0)));
1605                 replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG);
1606                 regstack->top--;
1607               }
1608             else
1609               {
1610                 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1611                 replace_reg (dest, get_hard_regnum (regstack, *dest));
1612               }
1613
1614             /* Keep operand 1 matching with destination.  */
1615             if (COMMUTATIVE_ARITH_P (pat_src)
1616                 && REG_P (*src1) && REG_P (*src2)
1617                 && REGNO (*src1) != REGNO (*dest))
1618              {
1619                 int tmp = REGNO (*src1);
1620                 replace_reg (src1, REGNO (*src2));
1621                 replace_reg (src2, tmp);
1622              }
1623             break;
1624
1625           case UNSPEC:
1626             switch (XINT (pat_src, 1))
1627               {
1628               case UNSPEC_FIST:
1629
1630               case UNSPEC_FIST_FLOOR:
1631               case UNSPEC_FIST_CEIL:
1632
1633                 /* These insns only operate on the top of the stack.  */
1634
1635                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1636                 emit_swap_insn (insn, regstack, *src1);
1637
1638                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1639
1640                 if (STACK_REG_P (*dest))
1641                   replace_reg (dest, FIRST_STACK_REG);
1642
1643                 if (src1_note)
1644                   {
1645                     replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1646                     regstack->top--;
1647                     CLEAR_HARD_REG_BIT (regstack->reg_set, REGNO (*src1));
1648                   }
1649
1650                 replace_reg (src1, FIRST_STACK_REG);
1651                 break;
1652
1653               case UNSPEC_FXAM:
1654
1655                 /* This insn only operate on the top of the stack.  */
1656
1657                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1658                 emit_swap_insn (insn, regstack, *src1);
1659
1660                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1661
1662                 replace_reg (src1, FIRST_STACK_REG);
1663
1664                 if (src1_note)
1665                   {
1666                     remove_regno_note (insn, REG_DEAD,
1667                                        REGNO (XEXP (src1_note, 0)));
1668                     emit_pop_insn (insn, regstack, XEXP (src1_note, 0),
1669                                    EMIT_AFTER);
1670                   }
1671
1672                 break;
1673
1674               case UNSPEC_SIN:
1675               case UNSPEC_COS:
1676               case UNSPEC_FRNDINT:
1677               case UNSPEC_F2XM1:
1678
1679               case UNSPEC_FRNDINT_FLOOR:
1680               case UNSPEC_FRNDINT_CEIL:
1681               case UNSPEC_FRNDINT_TRUNC:
1682               case UNSPEC_FRNDINT_MASK_PM:
1683
1684                 /* Above insns operate on the top of the stack.  */
1685
1686               case UNSPEC_SINCOS_COS:
1687               case UNSPEC_XTRACT_FRACT:
1688
1689                 /* Above insns operate on the top two stack slots,
1690                    first part of one input, double output insn.  */
1691
1692                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1693
1694                 emit_swap_insn (insn, regstack, *src1);
1695
1696                 /* Input should never die, it is replaced with output.  */
1697                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1698                 gcc_assert (!src1_note);
1699
1700                 if (STACK_REG_P (*dest))
1701                   replace_reg (dest, FIRST_STACK_REG);
1702
1703                 replace_reg (src1, FIRST_STACK_REG);
1704                 break;
1705
1706               case UNSPEC_SINCOS_SIN:
1707               case UNSPEC_XTRACT_EXP:
1708
1709                 /* These insns operate on the top two stack slots,
1710                    second part of one input, double output insn.  */
1711
1712                 regstack->top++;
1713                 /* FALLTHRU */
1714
1715               case UNSPEC_TAN:
1716
1717                 /* For UNSPEC_TAN, regstack->top is already increased
1718                    by inherent load of constant 1.0.  */
1719
1720                 /* Output value is generated in the second stack slot.
1721                    Move current value from second slot to the top.  */
1722                 regstack->reg[regstack->top]
1723                   = regstack->reg[regstack->top - 1];
1724
1725                 gcc_assert (STACK_REG_P (*dest));
1726
1727                 regstack->reg[regstack->top - 1] = REGNO (*dest);
1728                 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1729                 replace_reg (dest, FIRST_STACK_REG + 1);
1730
1731                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1732
1733                 replace_reg (src1, FIRST_STACK_REG);
1734                 break;
1735
1736               case UNSPEC_FPATAN:
1737               case UNSPEC_FYL2X:
1738               case UNSPEC_FYL2XP1:
1739                 /* These insns operate on the top two stack slots.  */
1740
1741                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1742                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1743
1744                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1745                 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1746
1747                 swap_to_top (insn, regstack, *src1, *src2);
1748
1749                 replace_reg (src1, FIRST_STACK_REG);
1750                 replace_reg (src2, FIRST_STACK_REG + 1);
1751
1752                 if (src1_note)
1753                   replace_reg (&XEXP (src1_note, 0), FIRST_STACK_REG);
1754                 if (src2_note)
1755                   replace_reg (&XEXP (src2_note, 0), FIRST_STACK_REG + 1);
1756
1757                 /* Pop both input operands from the stack.  */
1758                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1759                                     regstack->reg[regstack->top]);
1760                 CLEAR_HARD_REG_BIT (regstack->reg_set,
1761                                     regstack->reg[regstack->top - 1]);
1762                 regstack->top -= 2;
1763
1764                 /* Push the result back onto the stack.  */
1765                 regstack->reg[++regstack->top] = REGNO (*dest);
1766                 SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1767                 replace_reg (dest, FIRST_STACK_REG);
1768                 break;
1769
1770               case UNSPEC_FSCALE_FRACT:
1771               case UNSPEC_FPREM_F:
1772               case UNSPEC_FPREM1_F:
1773                 /* These insns operate on the top two stack slots,
1774                    first part of double input, double output insn.  */
1775
1776                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1777                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1778
1779                 src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1780                 src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1781
1782                 /* Inputs should never die, they are
1783                    replaced with outputs.  */
1784                 gcc_assert (!src1_note);
1785                 gcc_assert (!src2_note);
1786
1787                 swap_to_top (insn, regstack, *src1, *src2);
1788
1789                 /* Push the result back onto stack. Empty stack slot
1790                    will be filled in second part of insn.  */
1791                 if (STACK_REG_P (*dest))
1792                   {
1793                     regstack->reg[regstack->top] = REGNO (*dest);
1794                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1795                     replace_reg (dest, FIRST_STACK_REG);
1796                   }
1797
1798                 replace_reg (src1, FIRST_STACK_REG);
1799                 replace_reg (src2, FIRST_STACK_REG + 1);
1800                 break;
1801
1802               case UNSPEC_FSCALE_EXP:
1803               case UNSPEC_FPREM_U:
1804               case UNSPEC_FPREM1_U:
1805                 /* These insns operate on the top two stack slots,
1806                    second part of double input, double output insn.  */
1807
1808                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1809                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1810
1811                 /* Push the result back onto stack. Fill empty slot from
1812                    first part of insn and fix top of stack pointer.  */
1813                 if (STACK_REG_P (*dest))
1814                   {
1815                     regstack->reg[regstack->top - 1] = REGNO (*dest);
1816                     SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1817                     replace_reg (dest, FIRST_STACK_REG + 1);
1818                   }
1819
1820                 replace_reg (src1, FIRST_STACK_REG);
1821                 replace_reg (src2, FIRST_STACK_REG + 1);
1822                 break;
1823
1824               case UNSPEC_C2_FLAG:
1825                 /* This insn operates on the top two stack slots,
1826                    third part of C2 setting double input insn.  */
1827
1828                 src1 = get_true_reg (&XVECEXP (pat_src, 0, 0));
1829                 src2 = get_true_reg (&XVECEXP (pat_src, 0, 1));
1830
1831                 replace_reg (src1, FIRST_STACK_REG);
1832                 replace_reg (src2, FIRST_STACK_REG + 1);
1833                 break;
1834
1835               case UNSPEC_SAHF:
1836                 /* (unspec [(unspec [(compare)] UNSPEC_FNSTSW)] UNSPEC_SAHF)
1837                    The combination matches the PPRO fcomi instruction.  */
1838
1839                 pat_src = XVECEXP (pat_src, 0, 0);
1840                 gcc_assert (GET_CODE (pat_src) == UNSPEC);
1841                 gcc_assert (XINT (pat_src, 1) == UNSPEC_FNSTSW);
1842                 /* Fall through.  */
1843
1844               case UNSPEC_FNSTSW:
1845                 /* Combined fcomp+fnstsw generated for doing well with
1846                    CSE.  When optimizing this would have been broken
1847                    up before now.  */
1848
1849                 pat_src = XVECEXP (pat_src, 0, 0);
1850                 gcc_assert (GET_CODE (pat_src) == COMPARE);
1851
1852                 compare_for_stack_reg (insn, regstack, pat_src);
1853                 break;
1854
1855               default:
1856                 gcc_unreachable ();
1857               }
1858             break;
1859
1860           case IF_THEN_ELSE:
1861             /* This insn requires the top of stack to be the destination.  */
1862
1863             src1 = get_true_reg (&XEXP (pat_src, 1));
1864             src2 = get_true_reg (&XEXP (pat_src, 2));
1865
1866             src1_note = find_regno_note (insn, REG_DEAD, REGNO (*src1));
1867             src2_note = find_regno_note (insn, REG_DEAD, REGNO (*src2));
1868
1869             /* If the comparison operator is an FP comparison operator,
1870                it is handled correctly by compare_for_stack_reg () who
1871                will move the destination to the top of stack. But if the
1872                comparison operator is not an FP comparison operator, we
1873                have to handle it here.  */
1874             if (get_hard_regnum (regstack, *dest) >= FIRST_STACK_REG
1875                 && REGNO (*dest) != regstack->reg[regstack->top])
1876               {
1877                 /* In case one of operands is the top of stack and the operands
1878                    dies, it is safe to make it the destination operand by
1879                    reversing the direction of cmove and avoid fxch.  */
1880                 if ((REGNO (*src1) == regstack->reg[regstack->top]
1881                      && src1_note)
1882                     || (REGNO (*src2) == regstack->reg[regstack->top]
1883                         && src2_note))
1884                   {
1885                     int idx1 = (get_hard_regnum (regstack, *src1)
1886                                 - FIRST_STACK_REG);
1887                     int idx2 = (get_hard_regnum (regstack, *src2)
1888                                 - FIRST_STACK_REG);
1889
1890                     /* Make reg-stack believe that the operands are already
1891                        swapped on the stack */
1892                     regstack->reg[regstack->top - idx1] = REGNO (*src2);
1893                     regstack->reg[regstack->top - idx2] = REGNO (*src1);
1894
1895                     /* Reverse condition to compensate the operand swap.
1896                        i386 do have comparison always reversible.  */
1897                     PUT_CODE (XEXP (pat_src, 0),
1898                               reversed_comparison_code (XEXP (pat_src, 0), insn));
1899                   }
1900                 else
1901                   emit_swap_insn (insn, regstack, *dest);
1902               }
1903
1904             {
1905               rtx src_note [3];
1906               int i;
1907
1908               src_note[0] = 0;
1909               src_note[1] = src1_note;
1910               src_note[2] = src2_note;
1911
1912               if (STACK_REG_P (*src1))
1913                 replace_reg (src1, get_hard_regnum (regstack, *src1));
1914               if (STACK_REG_P (*src2))
1915                 replace_reg (src2, get_hard_regnum (regstack, *src2));
1916
1917               for (i = 1; i <= 2; i++)
1918                 if (src_note [i])
1919                   {
1920                     int regno = REGNO (XEXP (src_note[i], 0));
1921
1922                     /* If the register that dies is not at the top of
1923                        stack, then move the top of stack to the dead reg.
1924                        Top of stack should never die, as it is the
1925                        destination.  */
1926                     gcc_assert (regno != regstack->reg[regstack->top]);
1927                     remove_regno_note (insn, REG_DEAD, regno);
1928                     emit_pop_insn (insn, regstack, XEXP (src_note[i], 0),
1929                                     EMIT_AFTER);
1930                   }
1931             }
1932
1933             /* Make dest the top of stack.  Add dest to regstack if
1934                not present.  */
1935             if (get_hard_regnum (regstack, *dest) < FIRST_STACK_REG)
1936               regstack->reg[++regstack->top] = REGNO (*dest);
1937             SET_HARD_REG_BIT (regstack->reg_set, REGNO (*dest));
1938             replace_reg (dest, FIRST_STACK_REG);
1939             break;
1940
1941           default:
1942             gcc_unreachable ();
1943           }
1944         break;
1945       }
1946
1947     default:
1948       break;
1949     }
1950
1951   return control_flow_insn_deleted;
1952 }
1953 \f
1954 /* Substitute hard regnums for any stack regs in INSN, which has
1955    N_INPUTS inputs and N_OUTPUTS outputs.  REGSTACK is the stack info
1956    before the insn, and is updated with changes made here.
1957
1958    There are several requirements and assumptions about the use of
1959    stack-like regs in asm statements.  These rules are enforced by
1960    record_asm_stack_regs; see comments there for details.  Any
1961    asm_operands left in the RTL at this point may be assume to meet the
1962    requirements, since record_asm_stack_regs removes any problem asm.  */
1963
1964 static void
1965 subst_asm_stack_regs (rtx insn, stack regstack)
1966 {
1967   rtx body = PATTERN (insn);
1968   int alt;
1969
1970   rtx *note_reg;                /* Array of note contents */
1971   rtx **note_loc;               /* Address of REG field of each note */
1972   enum reg_note *note_kind;     /* The type of each note */
1973
1974   rtx *clobber_reg = 0;
1975   rtx **clobber_loc = 0;
1976
1977   struct stack_def temp_stack;
1978   int n_notes;
1979   int n_clobbers;
1980   rtx note;
1981   int i;
1982   int n_inputs, n_outputs;
1983
1984   if (! check_asm_stack_operands (insn))
1985     return;
1986
1987   /* Find out what the constraints required.  If no constraint
1988      alternative matches, that is a compiler bug: we should have caught
1989      such an insn in check_asm_stack_operands.  */
1990   extract_insn (insn);
1991   constrain_operands (1);
1992   alt = which_alternative;
1993
1994   preprocess_constraints ();
1995
1996   n_inputs = get_asm_operand_n_inputs (body);
1997   n_outputs = recog_data.n_operands - n_inputs;
1998
1999   gcc_assert (alt >= 0);
2000
2001   /* Strip SUBREGs here to make the following code simpler.  */
2002   for (i = 0; i < recog_data.n_operands; i++)
2003     if (GET_CODE (recog_data.operand[i]) == SUBREG
2004         && REG_P (SUBREG_REG (recog_data.operand[i])))
2005       {
2006         recog_data.operand_loc[i] = & SUBREG_REG (recog_data.operand[i]);
2007         recog_data.operand[i] = SUBREG_REG (recog_data.operand[i]);
2008       }
2009
2010   /* Set up NOTE_REG, NOTE_LOC and NOTE_KIND.  */
2011
2012   for (i = 0, note = REG_NOTES (insn); note; note = XEXP (note, 1))
2013     i++;
2014
2015   note_reg = alloca (i * sizeof (rtx));
2016   note_loc = alloca (i * sizeof (rtx *));
2017   note_kind = alloca (i * sizeof (enum reg_note));
2018
2019   n_notes = 0;
2020   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2021     {
2022       rtx reg = XEXP (note, 0);
2023       rtx *loc = & XEXP (note, 0);
2024
2025       if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
2026         {
2027           loc = & SUBREG_REG (reg);
2028           reg = SUBREG_REG (reg);
2029         }
2030
2031       if (STACK_REG_P (reg)
2032           && (REG_NOTE_KIND (note) == REG_DEAD
2033               || REG_NOTE_KIND (note) == REG_UNUSED))
2034         {
2035           note_reg[n_notes] = reg;
2036           note_loc[n_notes] = loc;
2037           note_kind[n_notes] = REG_NOTE_KIND (note);
2038           n_notes++;
2039         }
2040     }
2041
2042   /* Set up CLOBBER_REG and CLOBBER_LOC.  */
2043
2044   n_clobbers = 0;
2045
2046   if (GET_CODE (body) == PARALLEL)
2047     {
2048       clobber_reg = alloca (XVECLEN (body, 0) * sizeof (rtx));
2049       clobber_loc = alloca (XVECLEN (body, 0) * sizeof (rtx *));
2050
2051       for (i = 0; i < XVECLEN (body, 0); i++)
2052         if (GET_CODE (XVECEXP (body, 0, i)) == CLOBBER)
2053           {
2054             rtx clobber = XVECEXP (body, 0, i);
2055             rtx reg = XEXP (clobber, 0);
2056             rtx *loc = & XEXP (clobber, 0);
2057
2058             if (GET_CODE (reg) == SUBREG && REG_P (SUBREG_REG (reg)))
2059               {
2060                 loc = & SUBREG_REG (reg);
2061                 reg = SUBREG_REG (reg);
2062               }
2063
2064             if (STACK_REG_P (reg))
2065               {
2066                 clobber_reg[n_clobbers] = reg;
2067                 clobber_loc[n_clobbers] = loc;
2068                 n_clobbers++;
2069               }
2070           }
2071     }
2072
2073   temp_stack = *regstack;
2074
2075   /* Put the input regs into the desired place in TEMP_STACK.  */
2076
2077   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2078     if (STACK_REG_P (recog_data.operand[i])
2079         && reg_class_subset_p (recog_op_alt[i][alt].cl,
2080                                FLOAT_REGS)
2081         && recog_op_alt[i][alt].cl != FLOAT_REGS)
2082       {
2083         /* If an operand needs to be in a particular reg in
2084            FLOAT_REGS, the constraint was either 't' or 'u'.  Since
2085            these constraints are for single register classes, and
2086            reload guaranteed that operand[i] is already in that class,
2087            we can just use REGNO (recog_data.operand[i]) to know which
2088            actual reg this operand needs to be in.  */
2089
2090         int regno = get_hard_regnum (&temp_stack, recog_data.operand[i]);
2091
2092         gcc_assert (regno >= 0);
2093
2094         if ((unsigned int) regno != REGNO (recog_data.operand[i]))
2095           {
2096             /* recog_data.operand[i] is not in the right place.  Find
2097                it and swap it with whatever is already in I's place.
2098                K is where recog_data.operand[i] is now.  J is where it
2099                should be.  */
2100             int j, k, temp;
2101
2102             k = temp_stack.top - (regno - FIRST_STACK_REG);
2103             j = (temp_stack.top
2104                  - (REGNO (recog_data.operand[i]) - FIRST_STACK_REG));
2105
2106             temp = temp_stack.reg[k];
2107             temp_stack.reg[k] = temp_stack.reg[j];
2108             temp_stack.reg[j] = temp;
2109           }
2110       }
2111
2112   /* Emit insns before INSN to make sure the reg-stack is in the right
2113      order.  */
2114
2115   change_stack (insn, regstack, &temp_stack, EMIT_BEFORE);
2116
2117   /* Make the needed input register substitutions.  Do death notes and
2118      clobbers too, because these are for inputs, not outputs.  */
2119
2120   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2121     if (STACK_REG_P (recog_data.operand[i]))
2122       {
2123         int regnum = get_hard_regnum (regstack, recog_data.operand[i]);
2124
2125         gcc_assert (regnum >= 0);
2126
2127         replace_reg (recog_data.operand_loc[i], regnum);
2128       }
2129
2130   for (i = 0; i < n_notes; i++)
2131     if (note_kind[i] == REG_DEAD)
2132       {
2133         int regnum = get_hard_regnum (regstack, note_reg[i]);
2134
2135         gcc_assert (regnum >= 0);
2136
2137         replace_reg (note_loc[i], regnum);
2138       }
2139
2140   for (i = 0; i < n_clobbers; i++)
2141     {
2142       /* It's OK for a CLOBBER to reference a reg that is not live.
2143          Don't try to replace it in that case.  */
2144       int regnum = get_hard_regnum (regstack, clobber_reg[i]);
2145
2146       if (regnum >= 0)
2147         {
2148           /* Sigh - clobbers always have QImode.  But replace_reg knows
2149              that these regs can't be MODE_INT and will assert.  Just put
2150              the right reg there without calling replace_reg.  */
2151
2152           *clobber_loc[i] = FP_MODE_REG (regnum, DFmode);
2153         }
2154     }
2155
2156   /* Now remove from REGSTACK any inputs that the asm implicitly popped.  */
2157
2158   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2159     if (STACK_REG_P (recog_data.operand[i]))
2160       {
2161         /* An input reg is implicitly popped if it is tied to an
2162            output, or if there is a CLOBBER for it.  */
2163         int j;
2164
2165         for (j = 0; j < n_clobbers; j++)
2166           if (operands_match_p (clobber_reg[j], recog_data.operand[i]))
2167             break;
2168
2169         if (j < n_clobbers || recog_op_alt[i][alt].matches >= 0)
2170           {
2171             /* recog_data.operand[i] might not be at the top of stack.
2172                But that's OK, because all we need to do is pop the
2173                right number of regs off of the top of the reg-stack.
2174                record_asm_stack_regs guaranteed that all implicitly
2175                popped regs were grouped at the top of the reg-stack.  */
2176
2177             CLEAR_HARD_REG_BIT (regstack->reg_set,
2178                                 regstack->reg[regstack->top]);
2179             regstack->top--;
2180           }
2181       }
2182
2183   /* Now add to REGSTACK any outputs that the asm implicitly pushed.
2184      Note that there isn't any need to substitute register numbers.
2185      ???  Explain why this is true.  */
2186
2187   for (i = LAST_STACK_REG; i >= FIRST_STACK_REG; i--)
2188     {
2189       /* See if there is an output for this hard reg.  */
2190       int j;
2191
2192       for (j = 0; j < n_outputs; j++)
2193         if (STACK_REG_P (recog_data.operand[j])
2194             && REGNO (recog_data.operand[j]) == (unsigned) i)
2195           {
2196             regstack->reg[++regstack->top] = i;
2197             SET_HARD_REG_BIT (regstack->reg_set, i);
2198             break;
2199           }
2200     }
2201
2202   /* Now emit a pop insn for any REG_UNUSED output, or any REG_DEAD
2203      input that the asm didn't implicitly pop.  If the asm didn't
2204      implicitly pop an input reg, that reg will still be live.
2205
2206      Note that we can't use find_regno_note here: the register numbers
2207      in the death notes have already been substituted.  */
2208
2209   for (i = 0; i < n_outputs; i++)
2210     if (STACK_REG_P (recog_data.operand[i]))
2211       {
2212         int j;
2213
2214         for (j = 0; j < n_notes; j++)
2215           if (REGNO (recog_data.operand[i]) == REGNO (note_reg[j])
2216               && note_kind[j] == REG_UNUSED)
2217             {
2218               insn = emit_pop_insn (insn, regstack, recog_data.operand[i],
2219                                     EMIT_AFTER);
2220               break;
2221             }
2222       }
2223
2224   for (i = n_outputs; i < n_outputs + n_inputs; i++)
2225     if (STACK_REG_P (recog_data.operand[i]))
2226       {
2227         int j;
2228
2229         for (j = 0; j < n_notes; j++)
2230           if (REGNO (recog_data.operand[i]) == REGNO (note_reg[j])
2231               && note_kind[j] == REG_DEAD
2232               && TEST_HARD_REG_BIT (regstack->reg_set,
2233                                     REGNO (recog_data.operand[i])))
2234             {
2235               insn = emit_pop_insn (insn, regstack, recog_data.operand[i],
2236                                     EMIT_AFTER);
2237               break;
2238             }
2239       }
2240 }
2241 \f
2242 /* Substitute stack hard reg numbers for stack virtual registers in
2243    INSN.  Non-stack register numbers are not changed.  REGSTACK is the
2244    current stack content.  Insns may be emitted as needed to arrange the
2245    stack for the 387 based on the contents of the insn.  Return whether
2246    a control flow insn was deleted in the process.  */
2247
2248 static bool
2249 subst_stack_regs (rtx insn, stack regstack)
2250 {
2251   rtx *note_link, note;
2252   bool control_flow_insn_deleted = false;
2253   int i;
2254
2255   if (CALL_P (insn))
2256     {
2257       int top = regstack->top;
2258
2259       /* If there are any floating point parameters to be passed in
2260          registers for this call, make sure they are in the right
2261          order.  */
2262
2263       if (top >= 0)
2264         {
2265           straighten_stack (insn, regstack);
2266
2267           /* Now mark the arguments as dead after the call.  */
2268
2269           while (regstack->top >= 0)
2270             {
2271               CLEAR_HARD_REG_BIT (regstack->reg_set, FIRST_STACK_REG + regstack->top);
2272               regstack->top--;
2273             }
2274         }
2275     }
2276
2277   /* Do the actual substitution if any stack regs are mentioned.
2278      Since we only record whether entire insn mentions stack regs, and
2279      subst_stack_regs_pat only works for patterns that contain stack regs,
2280      we must check each pattern in a parallel here.  A call_value_pop could
2281      fail otherwise.  */
2282
2283   if (stack_regs_mentioned (insn))
2284     {
2285       int n_operands = asm_noperands (PATTERN (insn));
2286       if (n_operands >= 0)
2287         {
2288           /* This insn is an `asm' with operands.  Decode the operands,
2289              decide how many are inputs, and do register substitution.
2290              Any REG_UNUSED notes will be handled by subst_asm_stack_regs.  */
2291
2292           subst_asm_stack_regs (insn, regstack);
2293           return control_flow_insn_deleted;
2294         }
2295
2296       if (GET_CODE (PATTERN (insn)) == PARALLEL)
2297         for (i = 0; i < XVECLEN (PATTERN (insn), 0); i++)
2298           {
2299             if (stack_regs_mentioned_p (XVECEXP (PATTERN (insn), 0, i)))
2300               {
2301                 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == CLOBBER)
2302                    XVECEXP (PATTERN (insn), 0, i)
2303                      = shallow_copy_rtx (XVECEXP (PATTERN (insn), 0, i));
2304                 control_flow_insn_deleted
2305                   |= subst_stack_regs_pat (insn, regstack,
2306                                            XVECEXP (PATTERN (insn), 0, i));
2307               }
2308           }
2309       else
2310         control_flow_insn_deleted
2311           |= subst_stack_regs_pat (insn, regstack, PATTERN (insn));
2312     }
2313
2314   /* subst_stack_regs_pat may have deleted a no-op insn.  If so, any
2315      REG_UNUSED will already have been dealt with, so just return.  */
2316
2317   if (NOTE_P (insn) || INSN_DELETED_P (insn))
2318     return control_flow_insn_deleted;
2319
2320   /* If this a noreturn call, we can't insert pop insns after it.
2321      Instead, reset the stack state to empty.  */
2322   if (CALL_P (insn)
2323       && find_reg_note (insn, REG_NORETURN, NULL))
2324     {
2325       regstack->top = -1;
2326       CLEAR_HARD_REG_SET (regstack->reg_set);
2327       return control_flow_insn_deleted;
2328     }
2329
2330   /* If there is a REG_UNUSED note on a stack register on this insn,
2331      the indicated reg must be popped.  The REG_UNUSED note is removed,
2332      since the form of the newly emitted pop insn references the reg,
2333      making it no longer `unset'.  */
2334
2335   note_link = &REG_NOTES (insn);
2336   for (note = *note_link; note; note = XEXP (note, 1))
2337     if (REG_NOTE_KIND (note) == REG_UNUSED && STACK_REG_P (XEXP (note, 0)))
2338       {
2339         *note_link = XEXP (note, 1);
2340         insn = emit_pop_insn (insn, regstack, XEXP (note, 0), EMIT_AFTER);
2341       }
2342     else
2343       note_link = &XEXP (note, 1);
2344
2345   return control_flow_insn_deleted;
2346 }
2347 \f
2348 /* Change the organization of the stack so that it fits a new basic
2349    block.  Some registers might have to be popped, but there can never be
2350    a register live in the new block that is not now live.
2351
2352    Insert any needed insns before or after INSN, as indicated by
2353    WHERE.  OLD is the original stack layout, and NEW is the desired
2354    form.  OLD is updated to reflect the code emitted, i.e., it will be
2355    the same as NEW upon return.
2356
2357    This function will not preserve block_end[].  But that information
2358    is no longer needed once this has executed.  */
2359
2360 static void
2361 change_stack (rtx insn, stack old, stack new, enum emit_where where)
2362 {
2363   int reg;
2364   int update_end = 0;
2365   int i;
2366
2367   /* Stack adjustments for the first insn in a block update the
2368      current_block's stack_in instead of inserting insns directly.
2369      compensate_edges will add the necessary code later.  */
2370   if (current_block
2371       && starting_stack_p
2372       && where == EMIT_BEFORE)
2373     {
2374       BLOCK_INFO (current_block)->stack_in = *new;
2375       starting_stack_p = false;
2376       *old = *new;
2377       return;
2378     }
2379
2380   /* We will be inserting new insns "backwards".  If we are to insert
2381      after INSN, find the next insn, and insert before it.  */
2382
2383   if (where == EMIT_AFTER)
2384     {
2385       if (current_block && BB_END (current_block) == insn)
2386         update_end = 1;
2387       insn = NEXT_INSN (insn);
2388     }
2389
2390   /* Initialize partially dead variables.  */
2391   for (i = FIRST_STACK_REG; i < LAST_STACK_REG + 1; i++)
2392     if (TEST_HARD_REG_BIT (new->reg_set, i)
2393         && !TEST_HARD_REG_BIT (old->reg_set, i))
2394       {
2395         old->reg[++old->top] = i;
2396         SET_HARD_REG_BIT (old->reg_set, i);
2397         emit_insn_before (gen_rtx_SET (VOIDmode,
2398                                        FP_MODE_REG (i, SFmode), not_a_num), insn);
2399       }
2400
2401   /* Pop any registers that are not needed in the new block.  */
2402
2403   /* If the destination block's stack already has a specified layout
2404      and contains two or more registers, use a more intelligent algorithm
2405      to pop registers that minimizes the number number of fxchs below.  */
2406   if (new->top > 0)
2407     {
2408       bool slots[REG_STACK_SIZE];
2409       int pops[REG_STACK_SIZE];
2410       int next, dest, topsrc;
2411
2412       /* First pass to determine the free slots.  */
2413       for (reg = 0; reg <= new->top; reg++)
2414         slots[reg] = TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]);
2415
2416       /* Second pass to allocate preferred slots.  */
2417       topsrc = -1;
2418       for (reg = old->top; reg > new->top; reg--)
2419         if (TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]))
2420           {
2421             dest = -1;
2422             for (next = 0; next <= new->top; next++)
2423               if (!slots[next] && new->reg[next] == old->reg[reg])
2424                 {
2425                   /* If this is a preference for the new top of stack, record
2426                      the fact by remembering it's old->reg in topsrc.  */
2427                   if (next == new->top)
2428                     topsrc = reg;
2429                   slots[next] = true;
2430                   dest = next;
2431                   break;
2432                 }
2433             pops[reg] = dest;
2434           }
2435         else
2436           pops[reg] = reg;
2437
2438       /* Intentionally, avoid placing the top of stack in it's correct
2439          location, if we still need to permute the stack below and we
2440          can usefully place it somewhere else.  This is the case if any
2441          slot is still unallocated, in which case we should place the
2442          top of stack there.  */
2443       if (topsrc != -1)
2444         for (reg = 0; reg < new->top; reg++)
2445           if (!slots[reg])
2446             {
2447               pops[topsrc] = reg;
2448               slots[new->top] = false;
2449               slots[reg] = true;
2450               break;
2451             }
2452
2453       /* Third pass allocates remaining slots and emits pop insns.  */
2454       next = new->top;
2455       for (reg = old->top; reg > new->top; reg--)
2456         {
2457           dest = pops[reg];
2458           if (dest == -1)
2459             {
2460               /* Find next free slot.  */
2461               while (slots[next])
2462                 next--;
2463               dest = next--;
2464             }
2465           emit_pop_insn (insn, old, FP_MODE_REG (old->reg[dest], DFmode),
2466                          EMIT_BEFORE);
2467         }
2468     }
2469   else
2470     {
2471       /* The following loop attempts to maximize the number of times we
2472          pop the top of the stack, as this permits the use of the faster
2473          ffreep instruction on platforms that support it.  */
2474       int live, next;
2475
2476       live = 0;
2477       for (reg = 0; reg <= old->top; reg++)
2478         if (TEST_HARD_REG_BIT (new->reg_set, old->reg[reg]))
2479           live++;
2480
2481       next = live;
2482       while (old->top >= live)
2483         if (TEST_HARD_REG_BIT (new->reg_set, old->reg[old->top]))
2484           {
2485             while (TEST_HARD_REG_BIT (new->reg_set, old->reg[next]))
2486               next--;
2487             emit_pop_insn (insn, old, FP_MODE_REG (old->reg[next], DFmode),
2488                            EMIT_BEFORE);
2489           }
2490         else
2491           emit_pop_insn (insn, old, FP_MODE_REG (old->reg[old->top], DFmode),
2492                          EMIT_BEFORE);
2493     }
2494
2495   if (new->top == -2)
2496     {
2497       /* If the new block has never been processed, then it can inherit
2498          the old stack order.  */
2499
2500       new->top = old->top;
2501       memcpy (new->reg, old->reg, sizeof (new->reg));
2502     }
2503   else
2504     {
2505       /* This block has been entered before, and we must match the
2506          previously selected stack order.  */
2507
2508       /* By now, the only difference should be the order of the stack,
2509          not their depth or liveliness.  */
2510
2511       gcc_assert (hard_reg_set_equal_p (old->reg_set, new->reg_set));
2512       gcc_assert (old->top == new->top);
2513
2514       /* If the stack is not empty (new->top != -1), loop here emitting
2515          swaps until the stack is correct.
2516
2517          The worst case number of swaps emitted is N + 2, where N is the
2518          depth of the stack.  In some cases, the reg at the top of
2519          stack may be correct, but swapped anyway in order to fix
2520          other regs.  But since we never swap any other reg away from
2521          its correct slot, this algorithm will converge.  */
2522
2523       if (new->top != -1)
2524         do
2525           {
2526             /* Swap the reg at top of stack into the position it is
2527                supposed to be in, until the correct top of stack appears.  */
2528
2529             while (old->reg[old->top] != new->reg[new->top])
2530               {
2531                 for (reg = new->top; reg >= 0; reg--)
2532                   if (new->reg[reg] == old->reg[old->top])
2533                     break;
2534
2535                 gcc_assert (reg != -1);
2536
2537                 emit_swap_insn (insn, old,
2538                                 FP_MODE_REG (old->reg[reg], DFmode));
2539               }
2540
2541             /* See if any regs remain incorrect.  If so, bring an
2542              incorrect reg to the top of stack, and let the while loop
2543              above fix it.  */
2544
2545             for (reg = new->top; reg >= 0; reg--)
2546               if (new->reg[reg] != old->reg[reg])
2547                 {
2548                   emit_swap_insn (insn, old,
2549                                   FP_MODE_REG (old->reg[reg], DFmode));
2550                   break;
2551                 }
2552           } while (reg >= 0);
2553
2554       /* At this point there must be no differences.  */
2555
2556       for (reg = old->top; reg >= 0; reg--)
2557         gcc_assert (old->reg[reg] == new->reg[reg]);
2558     }
2559
2560   if (update_end)
2561     BB_END (current_block) = PREV_INSN (insn);
2562 }
2563 \f
2564 /* Print stack configuration.  */
2565
2566 static void
2567 print_stack (FILE *file, stack s)
2568 {
2569   if (! file)
2570     return;
2571
2572   if (s->top == -2)
2573     fprintf (file, "uninitialized\n");
2574   else if (s->top == -1)
2575     fprintf (file, "empty\n");
2576   else
2577     {
2578       int i;
2579       fputs ("[ ", file);
2580       for (i = 0; i <= s->top; ++i)
2581         fprintf (file, "%d ", s->reg[i]);
2582       fputs ("]\n", file);
2583     }
2584 }
2585 \f
2586 /* This function was doing life analysis.  We now let the regular live
2587    code do it's job, so we only need to check some extra invariants
2588    that reg-stack expects.  Primary among these being that all registers
2589    are initialized before use.
2590
2591    The function returns true when code was emitted to CFG edges and
2592    commit_edge_insertions needs to be called.  */
2593
2594 static int
2595 convert_regs_entry (void)
2596 {
2597   int inserted = 0;
2598   edge e;
2599   edge_iterator ei;
2600
2601   /* Load something into each stack register live at function entry.
2602      Such live registers can be caused by uninitialized variables or
2603      functions not returning values on all paths.  In order to keep
2604      the push/pop code happy, and to not scrog the register stack, we
2605      must put something in these registers.  Use a QNaN.
2606
2607      Note that we are inserting converted code here.  This code is
2608      never seen by the convert_regs pass.  */
2609
2610   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
2611     {
2612       basic_block block = e->dest;
2613       block_info bi = BLOCK_INFO (block);
2614       int reg, top = -1;
2615
2616       for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg)
2617         if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg))
2618           {
2619             rtx init;
2620
2621             bi->stack_in.reg[++top] = reg;
2622
2623             init = gen_rtx_SET (VOIDmode,
2624                                 FP_MODE_REG (FIRST_STACK_REG, SFmode),
2625                                 not_a_num);
2626             insert_insn_on_edge (init, e);
2627             inserted = 1;
2628           }
2629
2630       bi->stack_in.top = top;
2631     }
2632
2633   return inserted;
2634 }
2635
2636 /* Construct the desired stack for function exit.  This will either
2637    be `empty', or the function return value at top-of-stack.  */
2638
2639 static void
2640 convert_regs_exit (void)
2641 {
2642   int value_reg_low, value_reg_high;
2643   stack output_stack;
2644   rtx retvalue;
2645
2646   retvalue = stack_result (current_function_decl);
2647   value_reg_low = value_reg_high = -1;
2648   if (retvalue)
2649     {
2650       value_reg_low = REGNO (retvalue);
2651       value_reg_high = END_HARD_REGNO (retvalue) - 1;
2652     }
2653
2654   output_stack = &BLOCK_INFO (EXIT_BLOCK_PTR)->stack_in;
2655   if (value_reg_low == -1)
2656     output_stack->top = -1;
2657   else
2658     {
2659       int reg;
2660
2661       output_stack->top = value_reg_high - value_reg_low;
2662       for (reg = value_reg_low; reg <= value_reg_high; ++reg)
2663         {
2664           output_stack->reg[value_reg_high - reg] = reg;
2665           SET_HARD_REG_BIT (output_stack->reg_set, reg);
2666         }
2667     }
2668 }
2669
2670 /* Copy the stack info from the end of edge E's source block to the
2671    start of E's destination block.  */
2672
2673 static void
2674 propagate_stack (edge e)
2675 {
2676   stack src_stack = &BLOCK_INFO (e->src)->stack_out;
2677   stack dest_stack = &BLOCK_INFO (e->dest)->stack_in;
2678   int reg;
2679
2680   /* Preserve the order of the original stack, but check whether
2681      any pops are needed.  */
2682   dest_stack->top = -1;
2683   for (reg = 0; reg <= src_stack->top; ++reg)
2684     if (TEST_HARD_REG_BIT (dest_stack->reg_set, src_stack->reg[reg]))
2685       dest_stack->reg[++dest_stack->top] = src_stack->reg[reg];
2686
2687   /* Push in any partially dead values.  */
2688   for (reg = FIRST_STACK_REG; reg < LAST_STACK_REG + 1; reg++)
2689     if (TEST_HARD_REG_BIT (dest_stack->reg_set, reg)
2690         && !TEST_HARD_REG_BIT (src_stack->reg_set, reg))
2691       dest_stack->reg[++dest_stack->top] = reg;
2692 }
2693
2694
2695 /* Adjust the stack of edge E's source block on exit to match the stack
2696    of it's target block upon input.  The stack layouts of both blocks
2697    should have been defined by now.  */
2698
2699 static bool
2700 compensate_edge (edge e)
2701 {
2702   basic_block source = e->src, target = e->dest;
2703   stack target_stack = &BLOCK_INFO (target)->stack_in;
2704   stack source_stack = &BLOCK_INFO (source)->stack_out;
2705   struct stack_def regstack;
2706   int reg;
2707
2708   if (dump_file)
2709     fprintf (dump_file, "Edge %d->%d: ", source->index, target->index);
2710
2711   gcc_assert (target_stack->top != -2);
2712
2713   /* Check whether stacks are identical.  */
2714   if (target_stack->top == source_stack->top)
2715     {
2716       for (reg = target_stack->top; reg >= 0; --reg)
2717         if (target_stack->reg[reg] != source_stack->reg[reg])
2718           break;
2719
2720       if (reg == -1)
2721         {
2722           if (dump_file)
2723             fprintf (dump_file, "no changes needed\n");
2724           return false;
2725         }
2726     }
2727
2728   if (dump_file)
2729     {
2730       fprintf (dump_file, "correcting stack to ");
2731       print_stack (dump_file, target_stack);
2732     }
2733
2734   /* Abnormal calls may appear to have values live in st(0), but the
2735      abnormal return path will not have actually loaded the values.  */
2736   if (e->flags & EDGE_ABNORMAL_CALL)
2737     {
2738       /* Assert that the lifetimes are as we expect -- one value
2739          live at st(0) on the end of the source block, and no
2740          values live at the beginning of the destination block.
2741          For complex return values, we may have st(1) live as well.  */
2742       gcc_assert (source_stack->top == 0 || source_stack->top == 1);
2743       gcc_assert (target_stack->top == -1);
2744       return false;
2745     }
2746
2747   /* Handle non-call EH edges specially.  The normal return path have
2748      values in registers.  These will be popped en masse by the unwind
2749      library.  */
2750   if (e->flags & EDGE_EH)
2751     {
2752       gcc_assert (target_stack->top == -1);
2753       return false;
2754     }
2755
2756   /* We don't support abnormal edges.  Global takes care to
2757      avoid any live register across them, so we should never
2758      have to insert instructions on such edges.  */
2759   gcc_assert (! (e->flags & EDGE_ABNORMAL));
2760
2761   /* Make a copy of source_stack as change_stack is destructive.  */
2762   regstack = *source_stack;
2763
2764   /* It is better to output directly to the end of the block
2765      instead of to the edge, because emit_swap can do minimal
2766      insn scheduling.  We can do this when there is only one
2767      edge out, and it is not abnormal.  */
2768   if (EDGE_COUNT (source->succs) == 1)
2769     {
2770       current_block = source;
2771       change_stack (BB_END (source), &regstack, target_stack,
2772                     (JUMP_P (BB_END (source)) ? EMIT_BEFORE : EMIT_AFTER));
2773     }
2774   else
2775     {
2776       rtx seq, after;
2777
2778       current_block = NULL;
2779       start_sequence ();
2780
2781       /* ??? change_stack needs some point to emit insns after.  */
2782       after = emit_note (NOTE_INSN_DELETED);
2783
2784       change_stack (after, &regstack, target_stack, EMIT_BEFORE);
2785
2786       seq = get_insns ();
2787       end_sequence ();
2788
2789       insert_insn_on_edge (seq, e);
2790       return true;
2791     }
2792   return false;
2793 }
2794
2795 /* Traverse all non-entry edges in the CFG, and emit the necessary
2796    edge compensation code to change the stack from stack_out of the
2797    source block to the stack_in of the destination block.  */
2798
2799 static bool
2800 compensate_edges (void)
2801 {
2802   bool inserted = false;
2803   basic_block bb;
2804
2805   starting_stack_p = false;
2806
2807   FOR_EACH_BB (bb)
2808     if (bb != ENTRY_BLOCK_PTR)
2809       {
2810         edge e;
2811         edge_iterator ei;
2812
2813         FOR_EACH_EDGE (e, ei, bb->succs)
2814           inserted |= compensate_edge (e);
2815       }
2816   return inserted;
2817 }
2818
2819 /* Select the better of two edges E1 and E2 to use to determine the
2820    stack layout for their shared destination basic block.  This is
2821    typically the more frequently executed.  The edge E1 may be NULL
2822    (in which case E2 is returned), but E2 is always non-NULL.  */
2823
2824 static edge
2825 better_edge (edge e1, edge e2)
2826 {
2827   if (!e1)
2828     return e2;
2829
2830   if (EDGE_FREQUENCY (e1) > EDGE_FREQUENCY (e2))
2831     return e1;
2832   if (EDGE_FREQUENCY (e1) < EDGE_FREQUENCY (e2))
2833     return e2;
2834
2835   if (e1->count > e2->count)
2836     return e1;
2837   if (e1->count < e2->count)
2838     return e2;
2839
2840   /* Prefer critical edges to minimize inserting compensation code on
2841      critical edges.  */
2842
2843   if (EDGE_CRITICAL_P (e1) != EDGE_CRITICAL_P (e2))
2844     return EDGE_CRITICAL_P (e1) ? e1 : e2;
2845
2846   /* Avoid non-deterministic behavior.  */
2847   return (e1->src->index < e2->src->index) ? e1 : e2;
2848 }
2849
2850 /* Convert stack register references in one block.  */
2851
2852 static void
2853 convert_regs_1 (basic_block block)
2854 {
2855   struct stack_def regstack;
2856   block_info bi = BLOCK_INFO (block);
2857   int reg;
2858   rtx insn, next;
2859   bool control_flow_insn_deleted = false;
2860
2861   any_malformed_asm = false;
2862
2863   /* Choose an initial stack layout, if one hasn't already been chosen.  */
2864   if (bi->stack_in.top == -2)
2865     {
2866       edge e, beste = NULL;
2867       edge_iterator ei;
2868
2869       /* Select the best incoming edge (typically the most frequent) to
2870          use as a template for this basic block.  */
2871       FOR_EACH_EDGE (e, ei, block->preds)
2872         if (BLOCK_INFO (e->src)->done)
2873           beste = better_edge (beste, e);
2874
2875       if (beste)
2876         propagate_stack (beste);
2877       else
2878         {
2879           /* No predecessors.  Create an arbitrary input stack.  */
2880           bi->stack_in.top = -1;
2881           for (reg = LAST_STACK_REG; reg >= FIRST_STACK_REG; --reg)
2882             if (TEST_HARD_REG_BIT (bi->stack_in.reg_set, reg))
2883               bi->stack_in.reg[++bi->stack_in.top] = reg;
2884         }
2885     }
2886
2887   if (dump_file)
2888     {
2889       fprintf (dump_file, "\nBasic block %d\nInput stack: ", block->index);
2890       print_stack (dump_file, &bi->stack_in);
2891     }
2892
2893   /* Process all insns in this block.  Keep track of NEXT so that we
2894      don't process insns emitted while substituting in INSN.  */
2895   current_block = block;
2896   next = BB_HEAD (block);
2897   regstack = bi->stack_in;
2898   starting_stack_p = true;
2899
2900   do
2901     {
2902       insn = next;
2903       next = NEXT_INSN (insn);
2904
2905       /* Ensure we have not missed a block boundary.  */
2906       gcc_assert (next);
2907       if (insn == BB_END (block))
2908         next = NULL;
2909
2910       /* Don't bother processing unless there is a stack reg
2911          mentioned or if it's a CALL_INSN.  */
2912       if (stack_regs_mentioned (insn)
2913           || CALL_P (insn))
2914         {
2915           if (dump_file)
2916             {
2917               fprintf (dump_file, "  insn %d input stack: ",
2918                        INSN_UID (insn));
2919               print_stack (dump_file, &regstack);
2920             }
2921           control_flow_insn_deleted |= subst_stack_regs (insn, &regstack);
2922           starting_stack_p = false;
2923         }
2924     }
2925   while (next);
2926
2927   if (dump_file)
2928     {
2929       fprintf (dump_file, "Expected live registers [");
2930       for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; ++reg)
2931         if (TEST_HARD_REG_BIT (bi->out_reg_set, reg))
2932           fprintf (dump_file, " %d", reg);
2933       fprintf (dump_file, " ]\nOutput stack: ");
2934       print_stack (dump_file, &regstack);
2935     }
2936
2937   insn = BB_END (block);
2938   if (JUMP_P (insn))
2939     insn = PREV_INSN (insn);
2940
2941   /* If the function is declared to return a value, but it returns one
2942      in only some cases, some registers might come live here.  Emit
2943      necessary moves for them.  */
2944
2945   for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; ++reg)
2946     {
2947       if (TEST_HARD_REG_BIT (bi->out_reg_set, reg)
2948           && ! TEST_HARD_REG_BIT (regstack.reg_set, reg))
2949         {
2950           rtx set;
2951
2952           if (dump_file)
2953             fprintf (dump_file, "Emitting insn initializing reg %d\n", reg);
2954
2955           set = gen_rtx_SET (VOIDmode, FP_MODE_REG (reg, SFmode), not_a_num);
2956           insn = emit_insn_after (set, insn);
2957           control_flow_insn_deleted |= subst_stack_regs (insn, &regstack);
2958         }
2959     }
2960   
2961   /* Amongst the insns possibly deleted during the substitution process above,
2962      might have been the only trapping insn in the block.  We purge the now
2963      possibly dead EH edges here to avoid an ICE from fixup_abnormal_edges,
2964      called at the end of convert_regs.  The order in which we process the
2965      blocks ensures that we never delete an already processed edge.
2966
2967      Note that, at this point, the CFG may have been damaged by the emission
2968      of instructions after an abnormal call, which moves the basic block end
2969      (and is the reason why we call fixup_abnormal_edges later).  So we must
2970      be sure that the trapping insn has been deleted before trying to purge
2971      dead edges, otherwise we risk purging valid edges.
2972
2973      ??? We are normally supposed not to delete trapping insns, so we pretend
2974      that the insns deleted above don't actually trap.  It would have been
2975      better to detect this earlier and avoid creating the EH edge in the first
2976      place, still, but we don't have enough information at that time.  */
2977
2978   if (control_flow_insn_deleted)
2979     purge_dead_edges (block);
2980
2981   /* Something failed if the stack lives don't match.  If we had malformed
2982      asms, we zapped the instruction itself, but that didn't produce the
2983      same pattern of register kills as before.  */
2984      
2985   gcc_assert (hard_reg_set_equal_p (regstack.reg_set, bi->out_reg_set)
2986               || any_malformed_asm);
2987   bi->stack_out = regstack;
2988   bi->done = true;
2989 }
2990
2991 /* Convert registers in all blocks reachable from BLOCK.  */
2992
2993 static void
2994 convert_regs_2 (basic_block block)
2995 {
2996   basic_block *stack, *sp;
2997
2998   /* We process the blocks in a top-down manner, in a way such that one block
2999      is only processed after all its predecessors.  The number of predecessors
3000      of every block has already been computed.  */ 
3001
3002   stack = XNEWVEC (basic_block, n_basic_blocks);
3003   sp = stack;
3004
3005   *sp++ = block;
3006
3007   do
3008     {
3009       edge e;
3010       edge_iterator ei;
3011
3012       block = *--sp;
3013
3014       /* Processing BLOCK is achieved by convert_regs_1, which may purge
3015          some dead EH outgoing edge after the deletion of the trapping
3016          insn inside the block.  Since the number of predecessors of
3017          BLOCK's successors was computed based on the initial edge set,
3018          we check the necessity to process some of these successors
3019          before such an edge deletion may happen.  However, there is
3020          a pitfall: if BLOCK is the only predecessor of a successor and
3021          the edge between them happens to be deleted, the successor
3022          becomes unreachable and should not be processed.  The problem
3023          is that there is no way to preventively detect this case so we
3024          stack the successor in all cases and hand over the task of
3025          fixing up the discrepancy to convert_regs_1.  */
3026
3027       FOR_EACH_EDGE (e, ei, block->succs)
3028         if (! (e->flags & EDGE_DFS_BACK))
3029           {
3030             BLOCK_INFO (e->dest)->predecessors--;
3031             if (!BLOCK_INFO (e->dest)->predecessors)
3032               *sp++ = e->dest;
3033           }
3034
3035       convert_regs_1 (block);
3036     }
3037   while (sp != stack);
3038
3039   free (stack);
3040 }
3041
3042 /* Traverse all basic blocks in a function, converting the register
3043    references in each insn from the "flat" register file that gcc uses,
3044    to the stack-like registers the 387 uses.  */
3045
3046 static void
3047 convert_regs (void)
3048 {
3049   int inserted;
3050   basic_block b;
3051   edge e;
3052   edge_iterator ei;
3053
3054   /* Initialize uninitialized registers on function entry.  */
3055   inserted = convert_regs_entry ();
3056
3057   /* Construct the desired stack for function exit.  */
3058   convert_regs_exit ();
3059   BLOCK_INFO (EXIT_BLOCK_PTR)->done = 1;
3060
3061   /* ??? Future: process inner loops first, and give them arbitrary
3062      initial stacks which emit_swap_insn can modify.  This ought to
3063      prevent double fxch that often appears at the head of a loop.  */
3064
3065   /* Process all blocks reachable from all entry points.  */
3066   FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs)
3067     convert_regs_2 (e->dest);
3068
3069   /* ??? Process all unreachable blocks.  Though there's no excuse
3070      for keeping these even when not optimizing.  */
3071   FOR_EACH_BB (b)
3072     {
3073       block_info bi = BLOCK_INFO (b);
3074
3075       if (! bi->done)
3076         convert_regs_2 (b);
3077     }
3078
3079   inserted |= compensate_edges ();
3080
3081   clear_aux_for_blocks ();
3082
3083   fixup_abnormal_edges ();
3084   if (inserted)
3085     commit_edge_insertions ();
3086
3087   if (dump_file)
3088     fputc ('\n', dump_file);
3089 }
3090 \f
3091 /* Convert register usage from "flat" register file usage to a "stack
3092    register file.  FILE is the dump file, if used.
3093
3094    Construct a CFG and run life analysis.  Then convert each insn one
3095    by one.  Run a last cleanup_cfg pass, if optimizing, to eliminate
3096    code duplication created when the converter inserts pop insns on
3097    the edges.  */
3098
3099 static bool
3100 reg_to_stack (void)
3101 {
3102   basic_block bb;
3103   int i;
3104   int max_uid;
3105
3106   /* Clean up previous run.  */
3107   if (stack_regs_mentioned_data != NULL)
3108     VEC_free (char, heap, stack_regs_mentioned_data);
3109
3110   /* See if there is something to do.  Flow analysis is quite
3111      expensive so we might save some compilation time.  */
3112   for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
3113     if (df_regs_ever_live_p (i))
3114       break;
3115   if (i > LAST_STACK_REG)
3116     return false;
3117
3118   df_note_add_problem ();
3119   df_analyze ();
3120
3121   mark_dfs_back_edges ();
3122
3123   /* Set up block info for each basic block.  */
3124   alloc_aux_for_blocks (sizeof (struct block_info_def));
3125   FOR_EACH_BB (bb)
3126     {
3127       block_info bi = BLOCK_INFO (bb);
3128       edge_iterator ei;
3129       edge e;
3130       int reg;
3131
3132       FOR_EACH_EDGE (e, ei, bb->preds)
3133         if (!(e->flags & EDGE_DFS_BACK)
3134             && e->src != ENTRY_BLOCK_PTR)
3135           bi->predecessors++;
3136
3137       /* Set current register status at last instruction `uninitialized'.  */
3138       bi->stack_in.top = -2;
3139
3140       /* Copy live_at_end and live_at_start into temporaries.  */
3141       for (reg = FIRST_STACK_REG; reg <= LAST_STACK_REG; reg++)
3142         {
3143           if (REGNO_REG_SET_P (DF_LR_OUT (bb), reg))
3144             SET_HARD_REG_BIT (bi->out_reg_set, reg);
3145           if (REGNO_REG_SET_P (DF_LR_IN (bb), reg))
3146             SET_HARD_REG_BIT (bi->stack_in.reg_set, reg);
3147         }
3148     }
3149
3150   /* Create the replacement registers up front.  */
3151   for (i = FIRST_STACK_REG; i <= LAST_STACK_REG; i++)
3152     {
3153       enum machine_mode mode;
3154       for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
3155            mode != VOIDmode;
3156            mode = GET_MODE_WIDER_MODE (mode))
3157         FP_MODE_REG (i, mode) = gen_rtx_REG (mode, i);
3158       for (mode = GET_CLASS_NARROWEST_MODE (MODE_COMPLEX_FLOAT);
3159            mode != VOIDmode;
3160            mode = GET_MODE_WIDER_MODE (mode))
3161         FP_MODE_REG (i, mode) = gen_rtx_REG (mode, i);
3162     }
3163
3164   ix86_flags_rtx = gen_rtx_REG (CCmode, FLAGS_REG);
3165
3166   /* A QNaN for initializing uninitialized variables.
3167
3168      ??? We can't load from constant memory in PIC mode, because
3169      we're inserting these instructions before the prologue and
3170      the PIC register hasn't been set up.  In that case, fall back
3171      on zero, which we can get from `ldz'.  */
3172
3173   if ((flag_pic && !TARGET_64BIT)
3174       || ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC)
3175     not_a_num = CONST0_RTX (SFmode);
3176   else
3177     {
3178       not_a_num = gen_lowpart (SFmode, GEN_INT (0x7fc00000));
3179       not_a_num = force_const_mem (SFmode, not_a_num);
3180     }
3181
3182   /* Allocate a cache for stack_regs_mentioned.  */
3183   max_uid = get_max_uid ();
3184   stack_regs_mentioned_data = VEC_alloc (char, heap, max_uid + 1);
3185   memset (VEC_address (char, stack_regs_mentioned_data),
3186           0, sizeof (char) * max_uid + 1);
3187
3188   convert_regs ();
3189
3190   free_aux_for_blocks ();
3191   return true;
3192 }
3193 #endif /* STACK_REGS */
3194 \f
3195 static bool
3196 gate_handle_stack_regs (void)
3197 {
3198 #ifdef STACK_REGS
3199   return 1;
3200 #else
3201   return 0;
3202 #endif
3203 }
3204
3205 struct tree_opt_pass pass_stack_regs =
3206 {
3207   NULL,                                 /* name */
3208   gate_handle_stack_regs,               /* gate */
3209   NULL,                                 /* execute */
3210   NULL,                                 /* sub */
3211   NULL,                                 /* next */
3212   0,                                    /* static_pass_number */
3213   TV_REG_STACK,                         /* tv_id */
3214   0,                                    /* properties_required */
3215   0,                                    /* properties_provided */
3216   0,                                    /* properties_destroyed */
3217   0,                                    /* todo_flags_start */
3218   0,                                    /* todo_flags_finish */
3219   0                                     /* letter */
3220 };
3221
3222 /* Convert register usage from flat register file usage to a stack
3223    register file.  */
3224 static unsigned int
3225 rest_of_handle_stack_regs (void)
3226 {
3227 #ifdef STACK_REGS
3228   reg_to_stack ();
3229   regstack_completed = 1;
3230 #endif
3231   return 0;
3232 }
3233
3234 struct tree_opt_pass pass_stack_regs_run =
3235 {
3236   "stack",                              /* name */
3237   NULL,                                 /* gate */
3238   rest_of_handle_stack_regs,            /* execute */
3239   NULL,                                 /* sub */
3240   NULL,                                 /* next */
3241   0,                                    /* static_pass_number */
3242   TV_REG_STACK,                         /* tv_id */
3243   0,                                    /* properties_required */
3244   0,                                    /* properties_provided */
3245   0,                                    /* properties_destroyed */
3246   0,                                    /* todo_flags_start */
3247   TODO_df_finish | TODO_verify_rtl_sharing |
3248   TODO_dump_func |
3249   TODO_ggc_collect,                     /* todo_flags_finish */
3250   'k'                                   /* letter */
3251 };