OSDN Git Service

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