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