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