OSDN Git Service

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