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