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