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