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