xref: /netbsd-src/external/gpl3/gcc/dist/gcc/explow.cc (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 /* Subroutines for manipulating rtx's in semantically interesting ways.
2    Copyright (C) 1987-2022 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 under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10 
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 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 
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "target.h"
25 #include "function.h"
26 #include "rtl.h"
27 #include "tree.h"
28 #include "memmodel.h"
29 #include "tm_p.h"
30 #include "optabs.h"
31 #include "expmed.h"
32 #include "profile-count.h"
33 #include "emit-rtl.h"
34 #include "recog.h"
35 #include "diagnostic-core.h"
36 #include "stor-layout.h"
37 #include "langhooks.h"
38 #include "except.h"
39 #include "dojump.h"
40 #include "explow.h"
41 #include "expr.h"
42 #include "stringpool.h"
43 #include "common/common-target.h"
44 #include "output.h"
45 
46 static rtx break_out_memory_refs (rtx);
47 
48 
49 /* Truncate and perhaps sign-extend C as appropriate for MODE.  */
50 
51 HOST_WIDE_INT
trunc_int_for_mode(HOST_WIDE_INT c,machine_mode mode)52 trunc_int_for_mode (HOST_WIDE_INT c, machine_mode mode)
53 {
54   /* Not scalar_int_mode because we also allow pointer bound modes.  */
55   scalar_mode smode = as_a <scalar_mode> (mode);
56   int width = GET_MODE_PRECISION (smode);
57 
58   /* You want to truncate to a _what_?  */
59   gcc_assert (SCALAR_INT_MODE_P (mode));
60 
61   /* Canonicalize BImode to 0 and STORE_FLAG_VALUE.  */
62   if (smode == BImode)
63     return c & 1 ? STORE_FLAG_VALUE : 0;
64 
65   /* Sign-extend for the requested mode.  */
66 
67   if (width < HOST_BITS_PER_WIDE_INT)
68     {
69       HOST_WIDE_INT sign = 1;
70       sign <<= width - 1;
71       c &= (sign << 1) - 1;
72       c ^= sign;
73       c -= sign;
74     }
75 
76   return c;
77 }
78 
79 /* Likewise for polynomial values, using the sign-extended representation
80    for each individual coefficient.  */
81 
82 poly_int64
trunc_int_for_mode(poly_int64 x,machine_mode mode)83 trunc_int_for_mode (poly_int64 x, machine_mode mode)
84 {
85   for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
86     x.coeffs[i] = trunc_int_for_mode (x.coeffs[i], mode);
87   return x;
88 }
89 
90 /* Return an rtx for the sum of X and the integer C, given that X has
91    mode MODE.  INPLACE is true if X can be modified inplace or false
92    if it must be treated as immutable.  */
93 
94 rtx
plus_constant(machine_mode mode,rtx x,poly_int64 c,bool inplace)95 plus_constant (machine_mode mode, rtx x, poly_int64 c, bool inplace)
96 {
97   RTX_CODE code;
98   rtx y;
99   rtx tem;
100   int all_constant = 0;
101 
102   gcc_assert (GET_MODE (x) == VOIDmode || GET_MODE (x) == mode);
103 
104   if (known_eq (c, 0))
105     return x;
106 
107  restart:
108 
109   code = GET_CODE (x);
110   y = x;
111 
112   switch (code)
113     {
114     CASE_CONST_SCALAR_INT:
115       return immed_wide_int_const (wi::add (rtx_mode_t (x, mode), c), mode);
116     case MEM:
117       /* If this is a reference to the constant pool, try replacing it with
118 	 a reference to a new constant.  If the resulting address isn't
119 	 valid, don't return it because we have no way to validize it.  */
120       if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
121 	  && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)))
122 	{
123 	  rtx cst = get_pool_constant (XEXP (x, 0));
124 
125 	  if (GET_CODE (cst) == CONST_VECTOR
126 	      && GET_MODE_INNER (GET_MODE (cst)) == mode)
127 	    {
128 	      cst = gen_lowpart (mode, cst);
129 	      gcc_assert (cst);
130 	    }
131 	  else if (GET_MODE (cst) == VOIDmode
132 		   && get_pool_mode (XEXP (x, 0)) != mode)
133 	    break;
134 	  if (GET_MODE (cst) == VOIDmode || GET_MODE (cst) == mode)
135 	    {
136 	      tem = plus_constant (mode, cst, c);
137 	      tem = force_const_mem (GET_MODE (x), tem);
138 	      /* Targets may disallow some constants in the constant pool, thus
139 		 force_const_mem may return NULL_RTX.  */
140 	      if (tem && memory_address_p (GET_MODE (tem), XEXP (tem, 0)))
141 		return tem;
142 	    }
143 	}
144       break;
145 
146     case CONST:
147       /* If adding to something entirely constant, set a flag
148 	 so that we can add a CONST around the result.  */
149       if (inplace && shared_const_p (x))
150 	inplace = false;
151       x = XEXP (x, 0);
152       all_constant = 1;
153       goto restart;
154 
155     case SYMBOL_REF:
156     case LABEL_REF:
157       all_constant = 1;
158       break;
159 
160     case PLUS:
161       /* The interesting case is adding the integer to a sum.  Look
162 	 for constant term in the sum and combine with C.  For an
163 	 integer constant term or a constant term that is not an
164 	 explicit integer, we combine or group them together anyway.
165 
166 	 We may not immediately return from the recursive call here, lest
167 	 all_constant gets lost.  */
168 
169       if (CONSTANT_P (XEXP (x, 1)))
170 	{
171 	  rtx term = plus_constant (mode, XEXP (x, 1), c, inplace);
172 	  if (term == const0_rtx)
173 	    x = XEXP (x, 0);
174 	  else if (inplace)
175 	    XEXP (x, 1) = term;
176 	  else
177 	    x = gen_rtx_PLUS (mode, XEXP (x, 0), term);
178 	  c = 0;
179 	}
180       else if (rtx *const_loc = find_constant_term_loc (&y))
181 	{
182 	  if (!inplace)
183 	    {
184 	      /* We need to be careful since X may be shared and we can't
185 		 modify it in place.  */
186 	      x = copy_rtx (x);
187 	      const_loc = find_constant_term_loc (&x);
188 	    }
189 	  *const_loc = plus_constant (mode, *const_loc, c, true);
190 	  c = 0;
191 	}
192       break;
193 
194     default:
195       if (CONST_POLY_INT_P (x))
196 	return immed_wide_int_const (const_poly_int_value (x) + c, mode);
197       break;
198     }
199 
200   if (maybe_ne (c, 0))
201     x = gen_rtx_PLUS (mode, x, gen_int_mode (c, mode));
202 
203   if (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF)
204     return x;
205   else if (all_constant)
206     return gen_rtx_CONST (mode, x);
207   else
208     return x;
209 }
210 
211 /* If X is a sum, return a new sum like X but lacking any constant terms.
212    Add all the removed constant terms into *CONSTPTR.
213    X itself is not altered.  The result != X if and only if
214    it is not isomorphic to X.  */
215 
216 rtx
eliminate_constant_term(rtx x,rtx * constptr)217 eliminate_constant_term (rtx x, rtx *constptr)
218 {
219   rtx x0, x1;
220   rtx tem;
221 
222   if (GET_CODE (x) != PLUS)
223     return x;
224 
225   /* First handle constants appearing at this level explicitly.  */
226   if (CONST_INT_P (XEXP (x, 1))
227       && (tem = simplify_binary_operation (PLUS, GET_MODE (x), *constptr,
228 					   XEXP (x, 1))) != 0
229       && CONST_INT_P (tem))
230     {
231       *constptr = tem;
232       return eliminate_constant_term (XEXP (x, 0), constptr);
233     }
234 
235   tem = const0_rtx;
236   x0 = eliminate_constant_term (XEXP (x, 0), &tem);
237   x1 = eliminate_constant_term (XEXP (x, 1), &tem);
238   if ((x1 != XEXP (x, 1) || x0 != XEXP (x, 0))
239       && (tem = simplify_binary_operation (PLUS, GET_MODE (x),
240 					   *constptr, tem)) != 0
241       && CONST_INT_P (tem))
242     {
243       *constptr = tem;
244       return gen_rtx_PLUS (GET_MODE (x), x0, x1);
245     }
246 
247   return x;
248 }
249 
250 
251 /* Return a copy of X in which all memory references
252    and all constants that involve symbol refs
253    have been replaced with new temporary registers.
254    Also emit code to load the memory locations and constants
255    into those registers.
256 
257    If X contains no such constants or memory references,
258    X itself (not a copy) is returned.
259 
260    If a constant is found in the address that is not a legitimate constant
261    in an insn, it is left alone in the hope that it might be valid in the
262    address.
263 
264    X may contain no arithmetic except addition, subtraction and multiplication.
265    Values returned by expand_expr with 1 for sum_ok fit this constraint.  */
266 
267 static rtx
break_out_memory_refs(rtx x)268 break_out_memory_refs (rtx x)
269 {
270   if (MEM_P (x)
271       || (CONSTANT_P (x) && CONSTANT_ADDRESS_P (x)
272 	  && GET_MODE (x) != VOIDmode))
273     x = force_reg (GET_MODE (x), x);
274   else if (GET_CODE (x) == PLUS || GET_CODE (x) == MINUS
275 	   || GET_CODE (x) == MULT)
276     {
277       rtx op0 = break_out_memory_refs (XEXP (x, 0));
278       rtx op1 = break_out_memory_refs (XEXP (x, 1));
279 
280       if (op0 != XEXP (x, 0) || op1 != XEXP (x, 1))
281 	x = simplify_gen_binary (GET_CODE (x), GET_MODE (x), op0, op1);
282     }
283 
284   return x;
285 }
286 
287 /* Given X, a memory address in address space AS' pointer mode, convert it to
288    an address in the address space's address mode, or vice versa (TO_MODE says
289    which way).  We take advantage of the fact that pointers are not allowed to
290    overflow by commuting arithmetic operations over conversions so that address
291    arithmetic insns can be used. IN_CONST is true if this conversion is inside
292    a CONST. NO_EMIT is true if no insns should be emitted, and instead
293    it should return NULL if it can't be simplified without emitting insns.  */
294 
295 rtx
convert_memory_address_addr_space_1(scalar_int_mode to_mode ATTRIBUTE_UNUSED,rtx x,addr_space_t as ATTRIBUTE_UNUSED,bool in_const ATTRIBUTE_UNUSED,bool no_emit ATTRIBUTE_UNUSED)296 convert_memory_address_addr_space_1 (scalar_int_mode to_mode ATTRIBUTE_UNUSED,
297 				     rtx x, addr_space_t as ATTRIBUTE_UNUSED,
298 				     bool in_const ATTRIBUTE_UNUSED,
299 				     bool no_emit ATTRIBUTE_UNUSED)
300 {
301 #ifndef POINTERS_EXTEND_UNSIGNED
302   gcc_assert (GET_MODE (x) == to_mode || GET_MODE (x) == VOIDmode);
303   return x;
304 #else /* defined(POINTERS_EXTEND_UNSIGNED) */
305   scalar_int_mode pointer_mode, address_mode, from_mode;
306   rtx temp;
307   enum rtx_code code;
308 
309   /* If X already has the right mode, just return it.  */
310   if (GET_MODE (x) == to_mode)
311     return x;
312 
313   pointer_mode = targetm.addr_space.pointer_mode (as);
314   address_mode = targetm.addr_space.address_mode (as);
315   from_mode = to_mode == pointer_mode ? address_mode : pointer_mode;
316 
317   /* Here we handle some special cases.  If none of them apply, fall through
318      to the default case.  */
319   switch (GET_CODE (x))
320     {
321     CASE_CONST_SCALAR_INT:
322       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode))
323 	code = TRUNCATE;
324       else if (POINTERS_EXTEND_UNSIGNED < 0)
325 	break;
326       else if (POINTERS_EXTEND_UNSIGNED > 0)
327 	code = ZERO_EXTEND;
328       else
329 	code = SIGN_EXTEND;
330       temp = simplify_unary_operation (code, to_mode, x, from_mode);
331       if (temp)
332 	return temp;
333       break;
334 
335     case SUBREG:
336       if ((SUBREG_PROMOTED_VAR_P (x) || REG_POINTER (SUBREG_REG (x)))
337 	  && GET_MODE (SUBREG_REG (x)) == to_mode)
338 	return SUBREG_REG (x);
339       break;
340 
341     case LABEL_REF:
342       temp = gen_rtx_LABEL_REF (to_mode, label_ref_label (x));
343       LABEL_REF_NONLOCAL_P (temp) = LABEL_REF_NONLOCAL_P (x);
344       return temp;
345 
346     case SYMBOL_REF:
347       temp = shallow_copy_rtx (x);
348       PUT_MODE (temp, to_mode);
349       return temp;
350 
351     case CONST:
352       {
353 	auto *last = no_emit ? nullptr : get_last_insn ();
354 	temp = convert_memory_address_addr_space_1 (to_mode, XEXP (x, 0), as,
355 						    true, no_emit);
356 	if (temp && (no_emit || last == get_last_insn ()))
357 	  return gen_rtx_CONST (to_mode, temp);
358 	return temp;
359       }
360 
361     case PLUS:
362     case MULT:
363       /* For addition we can safely permute the conversion and addition
364 	 operation if one operand is a constant and converting the constant
365 	 does not change it or if one operand is a constant and we are
366 	 using a ptr_extend instruction  (POINTERS_EXTEND_UNSIGNED < 0).
367 	 We can always safely permute them if we are making the address
368 	 narrower. Inside a CONST RTL, this is safe for both pointers
369 	 zero or sign extended as pointers cannot wrap. */
370       if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
371 	  || (GET_CODE (x) == PLUS
372 	      && CONST_INT_P (XEXP (x, 1))
373 	      && ((in_const && POINTERS_EXTEND_UNSIGNED != 0)
374 		  || XEXP (x, 1) == convert_memory_address_addr_space_1
375 				     (to_mode, XEXP (x, 1), as, in_const,
376 				      no_emit)
377                   || POINTERS_EXTEND_UNSIGNED < 0)))
378 	{
379 	  temp = convert_memory_address_addr_space_1 (to_mode, XEXP (x, 0),
380 						      as, in_const, no_emit);
381 	  return (temp ? gen_rtx_fmt_ee (GET_CODE (x), to_mode,
382 					 temp, XEXP (x, 1))
383 		       : temp);
384 	}
385       break;
386 
387     case UNSPEC:
388       /* Assume that all UNSPECs in a constant address can be converted
389 	 operand-by-operand.  We could add a target hook if some targets
390 	 require different behavior.  */
391       if (in_const && GET_MODE (x) == from_mode)
392 	{
393 	  unsigned int n = XVECLEN (x, 0);
394 	  rtvec v = gen_rtvec (n);
395 	  for (unsigned int i = 0; i < n; ++i)
396 	    {
397 	      rtx op = XVECEXP (x, 0, i);
398 	      if (GET_MODE (op) == from_mode)
399 		op = convert_memory_address_addr_space_1 (to_mode, op, as,
400 							  in_const, no_emit);
401 	      RTVEC_ELT (v, i) = op;
402 	    }
403 	  return gen_rtx_UNSPEC (to_mode, v, XINT (x, 1));
404 	}
405       break;
406 
407     default:
408       break;
409     }
410 
411   if (no_emit)
412     return NULL_RTX;
413 
414   return convert_modes (to_mode, from_mode,
415 			x, POINTERS_EXTEND_UNSIGNED);
416 #endif /* defined(POINTERS_EXTEND_UNSIGNED) */
417 }
418 
419 /* Given X, a memory address in address space AS' pointer mode, convert it to
420    an address in the address space's address mode, or vice versa (TO_MODE says
421    which way).  We take advantage of the fact that pointers are not allowed to
422    overflow by commuting arithmetic operations over conversions so that address
423    arithmetic insns can be used.  */
424 
425 rtx
convert_memory_address_addr_space(scalar_int_mode to_mode,rtx x,addr_space_t as)426 convert_memory_address_addr_space (scalar_int_mode to_mode, rtx x,
427 				   addr_space_t as)
428 {
429   return convert_memory_address_addr_space_1 (to_mode, x, as, false, false);
430 }
431 
432 
433 /* Return something equivalent to X but valid as a memory address for something
434    of mode MODE in the named address space AS.  When X is not itself valid,
435    this works by copying X or subexpressions of it into registers.  */
436 
437 rtx
memory_address_addr_space(machine_mode mode,rtx x,addr_space_t as)438 memory_address_addr_space (machine_mode mode, rtx x, addr_space_t as)
439 {
440   rtx oldx = x;
441   scalar_int_mode address_mode = targetm.addr_space.address_mode (as);
442 
443   x = convert_memory_address_addr_space (address_mode, x, as);
444 
445   /* By passing constant addresses through registers
446      we get a chance to cse them.  */
447   if (! cse_not_expected && CONSTANT_P (x) && CONSTANT_ADDRESS_P (x))
448     x = force_reg (address_mode, x);
449 
450   /* We get better cse by rejecting indirect addressing at this stage.
451      Let the combiner create indirect addresses where appropriate.
452      For now, generate the code so that the subexpressions useful to share
453      are visible.  But not if cse won't be done!  */
454   else
455     {
456       if (! cse_not_expected && !REG_P (x))
457 	x = break_out_memory_refs (x);
458 
459       /* At this point, any valid address is accepted.  */
460       if (memory_address_addr_space_p (mode, x, as))
461 	goto done;
462 
463       /* If it was valid before but breaking out memory refs invalidated it,
464 	 use it the old way.  */
465       if (memory_address_addr_space_p (mode, oldx, as))
466 	{
467 	  x = oldx;
468 	  goto done;
469 	}
470 
471       /* Perform machine-dependent transformations on X
472 	 in certain cases.  This is not necessary since the code
473 	 below can handle all possible cases, but machine-dependent
474 	 transformations can make better code.  */
475       {
476 	rtx orig_x = x;
477 	x = targetm.addr_space.legitimize_address (x, oldx, mode, as);
478 	if (orig_x != x && memory_address_addr_space_p (mode, x, as))
479 	  goto done;
480       }
481 
482       /* PLUS and MULT can appear in special ways
483 	 as the result of attempts to make an address usable for indexing.
484 	 Usually they are dealt with by calling force_operand, below.
485 	 But a sum containing constant terms is special
486 	 if removing them makes the sum a valid address:
487 	 then we generate that address in a register
488 	 and index off of it.  We do this because it often makes
489 	 shorter code, and because the addresses thus generated
490 	 in registers often become common subexpressions.  */
491       if (GET_CODE (x) == PLUS)
492 	{
493 	  rtx constant_term = const0_rtx;
494 	  rtx y = eliminate_constant_term (x, &constant_term);
495 	  if (constant_term == const0_rtx
496 	      || ! memory_address_addr_space_p (mode, y, as))
497 	    x = force_operand (x, NULL_RTX);
498 	  else
499 	    {
500 	      y = gen_rtx_PLUS (GET_MODE (x), copy_to_reg (y), constant_term);
501 	      if (! memory_address_addr_space_p (mode, y, as))
502 		x = force_operand (x, NULL_RTX);
503 	      else
504 		x = y;
505 	    }
506 	}
507 
508       else if (GET_CODE (x) == MULT || GET_CODE (x) == MINUS)
509 	x = force_operand (x, NULL_RTX);
510 
511       /* If we have a register that's an invalid address,
512 	 it must be a hard reg of the wrong class.  Copy it to a pseudo.  */
513       else if (REG_P (x))
514 	x = copy_to_reg (x);
515 
516       /* Last resort: copy the value to a register, since
517 	 the register is a valid address.  */
518       else
519 	x = force_reg (address_mode, x);
520     }
521 
522  done:
523 
524   gcc_assert (memory_address_addr_space_p (mode, x, as));
525   /* If we didn't change the address, we are done.  Otherwise, mark
526      a reg as a pointer if we have REG or REG + CONST_INT.  */
527   if (oldx == x)
528     return x;
529   else if (REG_P (x))
530     mark_reg_pointer (x, BITS_PER_UNIT);
531   else if (GET_CODE (x) == PLUS
532 	   && REG_P (XEXP (x, 0))
533 	   && CONST_INT_P (XEXP (x, 1)))
534     mark_reg_pointer (XEXP (x, 0), BITS_PER_UNIT);
535 
536   /* OLDX may have been the address on a temporary.  Update the address
537      to indicate that X is now used.  */
538   update_temp_slot_address (oldx, x);
539 
540   return x;
541 }
542 
543 /* Convert a mem ref into one with a valid memory address.
544    Pass through anything else unchanged.  */
545 
546 rtx
validize_mem(rtx ref)547 validize_mem (rtx ref)
548 {
549   if (!MEM_P (ref))
550     return ref;
551   ref = use_anchored_address (ref);
552   if (memory_address_addr_space_p (GET_MODE (ref), XEXP (ref, 0),
553 				   MEM_ADDR_SPACE (ref)))
554     return ref;
555 
556   /* Don't alter REF itself, since that is probably a stack slot.  */
557   return replace_equiv_address (ref, XEXP (ref, 0));
558 }
559 
560 /* If X is a memory reference to a member of an object block, try rewriting
561    it to use an anchor instead.  Return the new memory reference on success
562    and the old one on failure.  */
563 
564 rtx
use_anchored_address(rtx x)565 use_anchored_address (rtx x)
566 {
567   rtx base;
568   HOST_WIDE_INT offset;
569   machine_mode mode;
570 
571   if (!flag_section_anchors)
572     return x;
573 
574   if (!MEM_P (x))
575     return x;
576 
577   /* Split the address into a base and offset.  */
578   base = XEXP (x, 0);
579   offset = 0;
580   if (GET_CODE (base) == CONST
581       && GET_CODE (XEXP (base, 0)) == PLUS
582       && CONST_INT_P (XEXP (XEXP (base, 0), 1)))
583     {
584       offset += INTVAL (XEXP (XEXP (base, 0), 1));
585       base = XEXP (XEXP (base, 0), 0);
586     }
587 
588   /* Check whether BASE is suitable for anchors.  */
589   if (GET_CODE (base) != SYMBOL_REF
590       || !SYMBOL_REF_HAS_BLOCK_INFO_P (base)
591       || SYMBOL_REF_ANCHOR_P (base)
592       || SYMBOL_REF_BLOCK (base) == NULL
593       || !targetm.use_anchors_for_symbol_p (base))
594     return x;
595 
596   /* Decide where BASE is going to be.  */
597   place_block_symbol (base);
598 
599   /* Get the anchor we need to use.  */
600   offset += SYMBOL_REF_BLOCK_OFFSET (base);
601   base = get_section_anchor (SYMBOL_REF_BLOCK (base), offset,
602 			     SYMBOL_REF_TLS_MODEL (base));
603 
604   /* Work out the offset from the anchor.  */
605   offset -= SYMBOL_REF_BLOCK_OFFSET (base);
606 
607   /* If we're going to run a CSE pass, force the anchor into a register.
608      We will then be able to reuse registers for several accesses, if the
609      target costs say that that's worthwhile.  */
610   mode = GET_MODE (base);
611   if (!cse_not_expected)
612     base = force_reg (mode, base);
613 
614   return replace_equiv_address (x, plus_constant (mode, base, offset));
615 }
616 
617 /* Copy the value or contents of X to a new temp reg and return that reg.  */
618 
619 rtx
copy_to_reg(rtx x)620 copy_to_reg (rtx x)
621 {
622   rtx temp = gen_reg_rtx (GET_MODE (x));
623 
624   /* If not an operand, must be an address with PLUS and MULT so
625      do the computation.  */
626   if (! general_operand (x, VOIDmode))
627     x = force_operand (x, temp);
628 
629   if (x != temp)
630     emit_move_insn (temp, x);
631 
632   return temp;
633 }
634 
635 /* Like copy_to_reg but always give the new register mode Pmode
636    in case X is a constant.  */
637 
638 rtx
copy_addr_to_reg(rtx x)639 copy_addr_to_reg (rtx x)
640 {
641   return copy_to_mode_reg (Pmode, x);
642 }
643 
644 /* Like copy_to_reg but always give the new register mode MODE
645    in case X is a constant.  */
646 
647 rtx
copy_to_mode_reg(machine_mode mode,rtx x)648 copy_to_mode_reg (machine_mode mode, rtx x)
649 {
650   rtx temp = gen_reg_rtx (mode);
651 
652   /* If not an operand, must be an address with PLUS and MULT so
653      do the computation.  */
654   if (! general_operand (x, VOIDmode))
655     x = force_operand (x, temp);
656 
657   gcc_assert (GET_MODE (x) == mode || GET_MODE (x) == VOIDmode);
658   if (x != temp)
659     emit_move_insn (temp, x);
660   return temp;
661 }
662 
663 /* Load X into a register if it is not already one.
664    Use mode MODE for the register.
665    X should be valid for mode MODE, but it may be a constant which
666    is valid for all integer modes; that's why caller must specify MODE.
667 
668    The caller must not alter the value in the register we return,
669    since we mark it as a "constant" register.  */
670 
671 rtx
force_reg(machine_mode mode,rtx x)672 force_reg (machine_mode mode, rtx x)
673 {
674   rtx temp, set;
675   rtx_insn *insn;
676 
677   if (REG_P (x))
678     return x;
679 
680   if (general_operand (x, mode))
681     {
682       temp = gen_reg_rtx (mode);
683       insn = emit_move_insn (temp, x);
684     }
685   else
686     {
687       temp = force_operand (x, NULL_RTX);
688       if (REG_P (temp))
689 	insn = get_last_insn ();
690       else
691 	{
692 	  rtx temp2 = gen_reg_rtx (mode);
693 	  insn = emit_move_insn (temp2, temp);
694 	  temp = temp2;
695 	}
696     }
697 
698   /* Let optimizers know that TEMP's value never changes
699      and that X can be substituted for it.  Don't get confused
700      if INSN set something else (such as a SUBREG of TEMP).  */
701   if (CONSTANT_P (x)
702       && (set = single_set (insn)) != 0
703       && SET_DEST (set) == temp
704       && ! rtx_equal_p (x, SET_SRC (set)))
705     set_unique_reg_note (insn, REG_EQUAL, x);
706 
707   /* Let optimizers know that TEMP is a pointer, and if so, the
708      known alignment of that pointer.  */
709   {
710     unsigned align = 0;
711     if (GET_CODE (x) == SYMBOL_REF)
712       {
713         align = BITS_PER_UNIT;
714 	if (SYMBOL_REF_DECL (x) && DECL_P (SYMBOL_REF_DECL (x)))
715 	  align = DECL_ALIGN (SYMBOL_REF_DECL (x));
716       }
717     else if (GET_CODE (x) == LABEL_REF)
718       align = BITS_PER_UNIT;
719     else if (GET_CODE (x) == CONST
720 	     && GET_CODE (XEXP (x, 0)) == PLUS
721 	     && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
722 	     && CONST_INT_P (XEXP (XEXP (x, 0), 1)))
723       {
724 	rtx s = XEXP (XEXP (x, 0), 0);
725 	rtx c = XEXP (XEXP (x, 0), 1);
726 	unsigned sa, ca;
727 
728 	sa = BITS_PER_UNIT;
729 	if (SYMBOL_REF_DECL (s) && DECL_P (SYMBOL_REF_DECL (s)))
730 	  sa = DECL_ALIGN (SYMBOL_REF_DECL (s));
731 
732 	if (INTVAL (c) == 0)
733 	  align = sa;
734 	else
735 	  {
736 	    ca = ctz_hwi (INTVAL (c)) * BITS_PER_UNIT;
737 	    align = MIN (sa, ca);
738 	  }
739       }
740 
741     if (align || (MEM_P (x) && MEM_POINTER (x)))
742       mark_reg_pointer (temp, align);
743   }
744 
745   return temp;
746 }
747 
748 /* If X is a memory ref, copy its contents to a new temp reg and return
749    that reg.  Otherwise, return X.  */
750 
751 rtx
force_not_mem(rtx x)752 force_not_mem (rtx x)
753 {
754   rtx temp;
755 
756   if (!MEM_P (x) || GET_MODE (x) == BLKmode)
757     return x;
758 
759   temp = gen_reg_rtx (GET_MODE (x));
760 
761   if (MEM_POINTER (x))
762     REG_POINTER (temp) = 1;
763 
764   emit_move_insn (temp, x);
765   return temp;
766 }
767 
768 /* Copy X to TARGET (if it's nonzero and a reg)
769    or to a new temp reg and return that reg.
770    MODE is the mode to use for X in case it is a constant.  */
771 
772 rtx
copy_to_suggested_reg(rtx x,rtx target,machine_mode mode)773 copy_to_suggested_reg (rtx x, rtx target, machine_mode mode)
774 {
775   rtx temp;
776 
777   if (target && REG_P (target))
778     temp = target;
779   else
780     temp = gen_reg_rtx (mode);
781 
782   emit_move_insn (temp, x);
783   return temp;
784 }
785 
786 /* Return the mode to use to pass or return a scalar of TYPE and MODE.
787    PUNSIGNEDP points to the signedness of the type and may be adjusted
788    to show what signedness to use on extension operations.
789 
790    FOR_RETURN is nonzero if the caller is promoting the return value
791    of FNDECL, else it is for promoting args.  */
792 
793 machine_mode
promote_function_mode(const_tree type,machine_mode mode,int * punsignedp,const_tree funtype,int for_return)794 promote_function_mode (const_tree type, machine_mode mode, int *punsignedp,
795 		       const_tree funtype, int for_return)
796 {
797   /* Called without a type node for a libcall.  */
798   if (type == NULL_TREE)
799     {
800       if (INTEGRAL_MODE_P (mode))
801 	return targetm.calls.promote_function_mode (NULL_TREE, mode,
802 						    punsignedp, funtype,
803 						    for_return);
804       else
805 	return mode;
806     }
807 
808   switch (TREE_CODE (type))
809     {
810     case INTEGER_TYPE:   case ENUMERAL_TYPE:   case BOOLEAN_TYPE:
811     case REAL_TYPE:      case OFFSET_TYPE:     case FIXED_POINT_TYPE:
812     case POINTER_TYPE:   case REFERENCE_TYPE:
813       return targetm.calls.promote_function_mode (type, mode, punsignedp, funtype,
814 						  for_return);
815 
816     default:
817       return mode;
818     }
819 }
820 /* Return the mode to use to store a scalar of TYPE and MODE.
821    PUNSIGNEDP points to the signedness of the type and may be adjusted
822    to show what signedness to use on extension operations.  */
823 
824 machine_mode
promote_mode(const_tree type ATTRIBUTE_UNUSED,machine_mode mode,int * punsignedp ATTRIBUTE_UNUSED)825 promote_mode (const_tree type ATTRIBUTE_UNUSED, machine_mode mode,
826 	      int *punsignedp ATTRIBUTE_UNUSED)
827 {
828 #ifdef PROMOTE_MODE
829   enum tree_code code;
830   int unsignedp;
831   scalar_mode smode;
832 #endif
833 
834   /* For libcalls this is invoked without TYPE from the backends
835      TARGET_PROMOTE_FUNCTION_MODE hooks.  Don't do anything in that
836      case.  */
837   if (type == NULL_TREE)
838     return mode;
839 
840   /* FIXME: this is the same logic that was there until GCC 4.4, but we
841      probably want to test POINTERS_EXTEND_UNSIGNED even if PROMOTE_MODE
842      is not defined.  The affected targets are M32C, S390, SPARC.  */
843 #ifdef PROMOTE_MODE
844   code = TREE_CODE (type);
845   unsignedp = *punsignedp;
846 
847   switch (code)
848     {
849     case INTEGER_TYPE:   case ENUMERAL_TYPE:   case BOOLEAN_TYPE:
850     case REAL_TYPE:      case OFFSET_TYPE:     case FIXED_POINT_TYPE:
851       /* Values of these types always have scalar mode.  */
852       smode = as_a <scalar_mode> (mode);
853       PROMOTE_MODE (smode, unsignedp, type);
854       *punsignedp = unsignedp;
855       return smode;
856 
857 #ifdef POINTERS_EXTEND_UNSIGNED
858     case REFERENCE_TYPE:
859     case POINTER_TYPE:
860       *punsignedp = POINTERS_EXTEND_UNSIGNED;
861       return targetm.addr_space.address_mode
862 	       (TYPE_ADDR_SPACE (TREE_TYPE (type)));
863 #endif
864 
865     default:
866       return mode;
867     }
868 #else
869   return mode;
870 #endif
871 }
872 
873 
874 /* Use one of promote_mode or promote_function_mode to find the promoted
875    mode of DECL.  If PUNSIGNEDP is not NULL, store there the unsignedness
876    of DECL after promotion.  */
877 
878 machine_mode
promote_decl_mode(const_tree decl,int * punsignedp)879 promote_decl_mode (const_tree decl, int *punsignedp)
880 {
881   tree type = TREE_TYPE (decl);
882   int unsignedp = TYPE_UNSIGNED (type);
883   machine_mode mode = DECL_MODE (decl);
884   machine_mode pmode;
885 
886   if (TREE_CODE (decl) == RESULT_DECL && !DECL_BY_REFERENCE (decl))
887     pmode = promote_function_mode (type, mode, &unsignedp,
888                                    TREE_TYPE (current_function_decl), 1);
889   else if (TREE_CODE (decl) == RESULT_DECL || TREE_CODE (decl) == PARM_DECL)
890     pmode = promote_function_mode (type, mode, &unsignedp,
891                                    TREE_TYPE (current_function_decl), 2);
892   else
893     pmode = promote_mode (type, mode, &unsignedp);
894 
895   if (punsignedp)
896     *punsignedp = unsignedp;
897   return pmode;
898 }
899 
900 /* Return the promoted mode for name.  If it is a named SSA_NAME, it
901    is the same as promote_decl_mode.  Otherwise, it is the promoted
902    mode of a temp decl of same type as the SSA_NAME, if we had created
903    one.  */
904 
905 machine_mode
promote_ssa_mode(const_tree name,int * punsignedp)906 promote_ssa_mode (const_tree name, int *punsignedp)
907 {
908   gcc_assert (TREE_CODE (name) == SSA_NAME);
909 
910   /* Partitions holding parms and results must be promoted as expected
911      by function.cc.  */
912   if (SSA_NAME_VAR (name)
913       && (TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL
914 	  || TREE_CODE (SSA_NAME_VAR (name)) == RESULT_DECL))
915     {
916       machine_mode mode = promote_decl_mode (SSA_NAME_VAR (name), punsignedp);
917       if (mode != BLKmode)
918 	return mode;
919     }
920 
921   tree type = TREE_TYPE (name);
922   int unsignedp = TYPE_UNSIGNED (type);
923   machine_mode pmode = promote_mode (type, TYPE_MODE (type), &unsignedp);
924   if (punsignedp)
925     *punsignedp = unsignedp;
926 
927   return pmode;
928 }
929 
930 
931 
932 /* Controls the behavior of {anti_,}adjust_stack.  */
933 static bool suppress_reg_args_size;
934 
935 /* A helper for adjust_stack and anti_adjust_stack.  */
936 
937 static void
adjust_stack_1(rtx adjust,bool anti_p)938 adjust_stack_1 (rtx adjust, bool anti_p)
939 {
940   rtx temp;
941   rtx_insn *insn;
942 
943   /* Hereafter anti_p means subtract_p.  */
944   if (!STACK_GROWS_DOWNWARD)
945     anti_p = !anti_p;
946 
947   temp = expand_binop (Pmode,
948 		       anti_p ? sub_optab : add_optab,
949 		       stack_pointer_rtx, adjust, stack_pointer_rtx, 0,
950 		       OPTAB_LIB_WIDEN);
951 
952   if (temp != stack_pointer_rtx)
953     insn = emit_move_insn (stack_pointer_rtx, temp);
954   else
955     {
956       insn = get_last_insn ();
957       temp = single_set (insn);
958       gcc_assert (temp != NULL && SET_DEST (temp) == stack_pointer_rtx);
959     }
960 
961   if (!suppress_reg_args_size)
962     add_args_size_note (insn, stack_pointer_delta);
963 }
964 
965 /* Adjust the stack pointer by ADJUST (an rtx for a number of bytes).
966    This pops when ADJUST is positive.  ADJUST need not be constant.  */
967 
968 void
adjust_stack(rtx adjust)969 adjust_stack (rtx adjust)
970 {
971   if (adjust == const0_rtx)
972     return;
973 
974   /* We expect all variable sized adjustments to be multiple of
975      PREFERRED_STACK_BOUNDARY.  */
976   poly_int64 const_adjust;
977   if (poly_int_rtx_p (adjust, &const_adjust))
978     stack_pointer_delta -= const_adjust;
979 
980   adjust_stack_1 (adjust, false);
981 }
982 
983 /* Adjust the stack pointer by minus ADJUST (an rtx for a number of bytes).
984    This pushes when ADJUST is positive.  ADJUST need not be constant.  */
985 
986 void
anti_adjust_stack(rtx adjust)987 anti_adjust_stack (rtx adjust)
988 {
989   if (adjust == const0_rtx)
990     return;
991 
992   /* We expect all variable sized adjustments to be multiple of
993      PREFERRED_STACK_BOUNDARY.  */
994   poly_int64 const_adjust;
995   if (poly_int_rtx_p (adjust, &const_adjust))
996     stack_pointer_delta += const_adjust;
997 
998   adjust_stack_1 (adjust, true);
999 }
1000 
1001 /* Round the size of a block to be pushed up to the boundary required
1002    by this machine.  SIZE is the desired size, which need not be constant.  */
1003 
1004 static rtx
round_push(rtx size)1005 round_push (rtx size)
1006 {
1007   rtx align_rtx, alignm1_rtx;
1008 
1009   if (!SUPPORTS_STACK_ALIGNMENT
1010       || crtl->preferred_stack_boundary == MAX_SUPPORTED_STACK_ALIGNMENT)
1011     {
1012       int align = crtl->preferred_stack_boundary / BITS_PER_UNIT;
1013 
1014       if (align == 1)
1015 	return size;
1016 
1017       if (CONST_INT_P (size))
1018 	{
1019 	  HOST_WIDE_INT new_size = (INTVAL (size) + align - 1) / align * align;
1020 
1021 	  if (INTVAL (size) != new_size)
1022 	    size = GEN_INT (new_size);
1023 	  return size;
1024 	}
1025 
1026       align_rtx = GEN_INT (align);
1027       alignm1_rtx = GEN_INT (align - 1);
1028     }
1029   else
1030     {
1031       /* If crtl->preferred_stack_boundary might still grow, use
1032 	 virtual_preferred_stack_boundary_rtx instead.  This will be
1033 	 substituted by the right value in vregs pass and optimized
1034 	 during combine.  */
1035       align_rtx = virtual_preferred_stack_boundary_rtx;
1036       alignm1_rtx = force_operand (plus_constant (Pmode, align_rtx, -1),
1037 				   NULL_RTX);
1038     }
1039 
1040   /* CEIL_DIV_EXPR needs to worry about the addition overflowing,
1041      but we know it can't.  So add ourselves and then do
1042      TRUNC_DIV_EXPR.  */
1043   size = expand_binop (Pmode, add_optab, size, alignm1_rtx,
1044 		       NULL_RTX, 1, OPTAB_LIB_WIDEN);
1045   size = expand_divmod (0, TRUNC_DIV_EXPR, Pmode, size, align_rtx,
1046 			NULL_RTX, 1);
1047   size = expand_mult (Pmode, size, align_rtx, NULL_RTX, 1);
1048 
1049   return size;
1050 }
1051 
1052 /* Save the stack pointer for the purpose in SAVE_LEVEL.  PSAVE is a pointer
1053    to a previously-created save area.  If no save area has been allocated,
1054    this function will allocate one.  If a save area is specified, it
1055    must be of the proper mode.  */
1056 
1057 void
emit_stack_save(enum save_level save_level,rtx * psave)1058 emit_stack_save (enum save_level save_level, rtx *psave)
1059 {
1060   rtx sa = *psave;
1061   /* The default is that we use a move insn and save in a Pmode object.  */
1062   rtx_insn *(*fcn) (rtx, rtx) = gen_move_insn;
1063   machine_mode mode = STACK_SAVEAREA_MODE (save_level);
1064 
1065   /* See if this machine has anything special to do for this kind of save.  */
1066   switch (save_level)
1067     {
1068     case SAVE_BLOCK:
1069       if (targetm.have_save_stack_block ())
1070 	fcn = targetm.gen_save_stack_block;
1071       break;
1072     case SAVE_FUNCTION:
1073       if (targetm.have_save_stack_function ())
1074 	fcn = targetm.gen_save_stack_function;
1075       break;
1076     case SAVE_NONLOCAL:
1077       if (targetm.have_save_stack_nonlocal ())
1078 	fcn = targetm.gen_save_stack_nonlocal;
1079       break;
1080     default:
1081       break;
1082     }
1083 
1084   /* If there is no save area and we have to allocate one, do so.  Otherwise
1085      verify the save area is the proper mode.  */
1086 
1087   if (sa == 0)
1088     {
1089       if (mode != VOIDmode)
1090 	{
1091 	  if (save_level == SAVE_NONLOCAL)
1092 	    *psave = sa = assign_stack_local (mode, GET_MODE_SIZE (mode), 0);
1093 	  else
1094 	    *psave = sa = gen_reg_rtx (mode);
1095 	}
1096     }
1097 
1098   do_pending_stack_adjust ();
1099   if (sa != 0)
1100     sa = validize_mem (sa);
1101   emit_insn (fcn (sa, stack_pointer_rtx));
1102 }
1103 
1104 /* Restore the stack pointer for the purpose in SAVE_LEVEL.  SA is the save
1105    area made by emit_stack_save.  If it is zero, we have nothing to do.  */
1106 
1107 void
emit_stack_restore(enum save_level save_level,rtx sa)1108 emit_stack_restore (enum save_level save_level, rtx sa)
1109 {
1110   /* The default is that we use a move insn.  */
1111   rtx_insn *(*fcn) (rtx, rtx) = gen_move_insn;
1112 
1113   /* If stack_realign_drap, the x86 backend emits a prologue that aligns both
1114      STACK_POINTER and HARD_FRAME_POINTER.
1115      If stack_realign_fp, the x86 backend emits a prologue that aligns only
1116      STACK_POINTER. This renders the HARD_FRAME_POINTER unusable for accessing
1117      aligned variables, which is reflected in ix86_can_eliminate.
1118      We normally still have the realigned STACK_POINTER that we can use.
1119      But if there is a stack restore still present at reload, it can trigger
1120      mark_not_eliminable for the STACK_POINTER, leaving no way to eliminate
1121      FRAME_POINTER into a hard reg.
1122      To prevent this situation, we force need_drap if we emit a stack
1123      restore.  */
1124   if (SUPPORTS_STACK_ALIGNMENT)
1125     crtl->need_drap = true;
1126 
1127   /* See if this machine has anything special to do for this kind of save.  */
1128   switch (save_level)
1129     {
1130     case SAVE_BLOCK:
1131       if (targetm.have_restore_stack_block ())
1132 	fcn = targetm.gen_restore_stack_block;
1133       break;
1134     case SAVE_FUNCTION:
1135       if (targetm.have_restore_stack_function ())
1136 	fcn = targetm.gen_restore_stack_function;
1137       break;
1138     case SAVE_NONLOCAL:
1139       if (targetm.have_restore_stack_nonlocal ())
1140 	fcn = targetm.gen_restore_stack_nonlocal;
1141       break;
1142     default:
1143       break;
1144     }
1145 
1146   if (sa != 0)
1147     {
1148       sa = validize_mem (sa);
1149       /* These clobbers prevent the scheduler from moving
1150 	 references to variable arrays below the code
1151 	 that deletes (pops) the arrays.  */
1152       emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
1153       emit_clobber (gen_rtx_MEM (BLKmode, stack_pointer_rtx));
1154     }
1155 
1156   discard_pending_stack_adjust ();
1157 
1158   emit_insn (fcn (stack_pointer_rtx, sa));
1159 }
1160 
1161 /* Invoke emit_stack_save on the nonlocal_goto_save_area for the current
1162    function.  This should be called whenever we allocate or deallocate
1163    dynamic stack space.  */
1164 
1165 void
update_nonlocal_goto_save_area(void)1166 update_nonlocal_goto_save_area (void)
1167 {
1168   tree t_save;
1169   rtx r_save;
1170 
1171   /* The nonlocal_goto_save_area object is an array of N pointers.  The
1172      first one is used for the frame pointer save; the rest are sized by
1173      STACK_SAVEAREA_MODE.  Create a reference to array index 1, the first
1174      of the stack save area slots.  */
1175   t_save = build4 (ARRAY_REF,
1176 		   TREE_TYPE (TREE_TYPE (cfun->nonlocal_goto_save_area)),
1177 		   cfun->nonlocal_goto_save_area,
1178 		   integer_one_node, NULL_TREE, NULL_TREE);
1179   r_save = expand_expr (t_save, NULL_RTX, VOIDmode, EXPAND_WRITE);
1180 
1181   emit_stack_save (SAVE_NONLOCAL, &r_save);
1182 }
1183 
1184 /* Record a new stack level for the current function.  This should be called
1185    whenever we allocate or deallocate dynamic stack space.  */
1186 
1187 void
record_new_stack_level(void)1188 record_new_stack_level (void)
1189 {
1190   /* Record the new stack level for nonlocal gotos.  */
1191   if (cfun->nonlocal_goto_save_area)
1192     update_nonlocal_goto_save_area ();
1193 
1194   /* Record the new stack level for SJLJ exceptions.  */
1195   if (targetm_common.except_unwind_info (&global_options) == UI_SJLJ)
1196     update_sjlj_context ();
1197 }
1198 
1199 /* Return an rtx doing runtime alignment to REQUIRED_ALIGN on TARGET.  */
1200 
1201 rtx
align_dynamic_address(rtx target,unsigned required_align)1202 align_dynamic_address (rtx target, unsigned required_align)
1203 {
1204   /* CEIL_DIV_EXPR needs to worry about the addition overflowing,
1205      but we know it can't.  So add ourselves and then do
1206      TRUNC_DIV_EXPR.  */
1207   target = expand_binop (Pmode, add_optab, target,
1208 			 gen_int_mode (required_align / BITS_PER_UNIT - 1,
1209 				       Pmode),
1210 			 NULL_RTX, 1, OPTAB_LIB_WIDEN);
1211   target = expand_divmod (0, TRUNC_DIV_EXPR, Pmode, target,
1212 			  gen_int_mode (required_align / BITS_PER_UNIT,
1213 					Pmode),
1214 			  NULL_RTX, 1);
1215   target = expand_mult (Pmode, target,
1216 			gen_int_mode (required_align / BITS_PER_UNIT,
1217 				      Pmode),
1218 			NULL_RTX, 1);
1219 
1220   return target;
1221 }
1222 
1223 /* Return an rtx through *PSIZE, representing the size of an area of memory to
1224    be dynamically pushed on the stack.
1225 
1226    *PSIZE is an rtx representing the size of the area.
1227 
1228    SIZE_ALIGN is the alignment (in bits) that we know SIZE has.  This
1229    parameter may be zero.  If so, a proper value will be extracted
1230    from SIZE if it is constant, otherwise BITS_PER_UNIT will be assumed.
1231 
1232    REQUIRED_ALIGN is the alignment (in bits) required for the region
1233    of memory.
1234 
1235    If PSTACK_USAGE_SIZE is not NULL it points to a value that is increased for
1236    the additional size returned.  */
1237 void
get_dynamic_stack_size(rtx * psize,unsigned size_align,unsigned required_align,HOST_WIDE_INT * pstack_usage_size)1238 get_dynamic_stack_size (rtx *psize, unsigned size_align,
1239 			unsigned required_align,
1240 			HOST_WIDE_INT *pstack_usage_size)
1241 {
1242   rtx size = *psize;
1243 
1244   /* Ensure the size is in the proper mode.  */
1245   if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode)
1246     size = convert_to_mode (Pmode, size, 1);
1247 
1248   if (CONST_INT_P (size))
1249     {
1250       unsigned HOST_WIDE_INT lsb;
1251 
1252       lsb = INTVAL (size);
1253       lsb &= -lsb;
1254 
1255       /* Watch out for overflow truncating to "unsigned".  */
1256       if (lsb > UINT_MAX / BITS_PER_UNIT)
1257 	size_align = 1u << (HOST_BITS_PER_INT - 1);
1258       else
1259 	size_align = (unsigned)lsb * BITS_PER_UNIT;
1260     }
1261   else if (size_align < BITS_PER_UNIT)
1262     size_align = BITS_PER_UNIT;
1263 
1264   /* We can't attempt to minimize alignment necessary, because we don't
1265      know the final value of preferred_stack_boundary yet while executing
1266      this code.  */
1267   if (crtl->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
1268     crtl->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
1269 
1270   /* We will need to ensure that the address we return is aligned to
1271      REQUIRED_ALIGN.  At this point in the compilation, we don't always
1272      know the final value of the STACK_DYNAMIC_OFFSET used in function.cc
1273      (it might depend on the size of the outgoing parameter lists, for
1274      example), so we must preventively align the value.  We leave space
1275      in SIZE for the hole that might result from the alignment operation.  */
1276 
1277   unsigned known_align = REGNO_POINTER_ALIGN (VIRTUAL_STACK_DYNAMIC_REGNUM);
1278   if (known_align == 0)
1279     known_align = BITS_PER_UNIT;
1280   if (required_align > known_align)
1281     {
1282       unsigned extra = (required_align - known_align) / BITS_PER_UNIT;
1283       size = plus_constant (Pmode, size, extra);
1284       size = force_operand (size, NULL_RTX);
1285       if (size_align > known_align)
1286 	size_align = known_align;
1287 
1288       if (flag_stack_usage_info && pstack_usage_size)
1289 	*pstack_usage_size += extra;
1290     }
1291 
1292   /* Round the size to a multiple of the required stack alignment.
1293      Since the stack is presumed to be rounded before this allocation,
1294      this will maintain the required alignment.
1295 
1296      If the stack grows downward, we could save an insn by subtracting
1297      SIZE from the stack pointer and then aligning the stack pointer.
1298      The problem with this is that the stack pointer may be unaligned
1299      between the execution of the subtraction and alignment insns and
1300      some machines do not allow this.  Even on those that do, some
1301      signal handlers malfunction if a signal should occur between those
1302      insns.  Since this is an extremely rare event, we have no reliable
1303      way of knowing which systems have this problem.  So we avoid even
1304      momentarily mis-aligning the stack.  */
1305   if (size_align % MAX_SUPPORTED_STACK_ALIGNMENT != 0)
1306     {
1307       size = round_push (size);
1308 
1309       if (flag_stack_usage_info && pstack_usage_size)
1310 	{
1311 	  int align = crtl->preferred_stack_boundary / BITS_PER_UNIT;
1312 	  *pstack_usage_size =
1313 	    (*pstack_usage_size + align - 1) / align * align;
1314 	}
1315     }
1316 
1317   *psize = size;
1318 }
1319 
1320 /* Return the number of bytes to "protect" on the stack for -fstack-check.
1321 
1322    "protect" in the context of -fstack-check means how many bytes we need
1323    to always ensure are available on the stack; as a consequence, this is
1324    also how many bytes are first skipped when probing the stack.
1325 
1326    On some targets we want to reuse the -fstack-check prologue support
1327    to give a degree of protection against stack clashing style attacks.
1328 
1329    In that scenario we do not want to skip bytes before probing as that
1330    would render the stack clash protections useless.
1331 
1332    So we never use STACK_CHECK_PROTECT directly.  Instead we indirectly
1333    use it through this helper, which allows to provide different values
1334    for -fstack-check and -fstack-clash-protection.  */
1335 
1336 HOST_WIDE_INT
get_stack_check_protect(void)1337 get_stack_check_protect (void)
1338 {
1339   if (flag_stack_clash_protection)
1340     return 0;
1341 
1342  return STACK_CHECK_PROTECT;
1343 }
1344 
1345 /* Return an rtx representing the address of an area of memory dynamically
1346    pushed on the stack.
1347 
1348    Any required stack pointer alignment is preserved.
1349 
1350    SIZE is an rtx representing the size of the area.
1351 
1352    SIZE_ALIGN is the alignment (in bits) that we know SIZE has.  This
1353    parameter may be zero.  If so, a proper value will be extracted
1354    from SIZE if it is constant, otherwise BITS_PER_UNIT will be assumed.
1355 
1356    REQUIRED_ALIGN is the alignment (in bits) required for the region
1357    of memory.
1358 
1359    MAX_SIZE is an upper bound for SIZE, if SIZE is not constant, or -1 if
1360    no such upper bound is known.
1361 
1362    If CANNOT_ACCUMULATE is set to TRUE, the caller guarantees that the
1363    stack space allocated by the generated code cannot be added with itself
1364    in the course of the execution of the function.  It is always safe to
1365    pass FALSE here and the following criterion is sufficient in order to
1366    pass TRUE: every path in the CFG that starts at the allocation point and
1367    loops to it executes the associated deallocation code.  */
1368 
1369 rtx
allocate_dynamic_stack_space(rtx size,unsigned size_align,unsigned required_align,HOST_WIDE_INT max_size,bool cannot_accumulate)1370 allocate_dynamic_stack_space (rtx size, unsigned size_align,
1371 			      unsigned required_align,
1372 			      HOST_WIDE_INT max_size,
1373 			      bool cannot_accumulate)
1374 {
1375   HOST_WIDE_INT stack_usage_size = -1;
1376   rtx_code_label *final_label;
1377   rtx final_target, target;
1378 
1379   /* If we're asking for zero bytes, it doesn't matter what we point
1380      to since we can't dereference it.  But return a reasonable
1381      address anyway.  */
1382   if (size == const0_rtx)
1383     return virtual_stack_dynamic_rtx;
1384 
1385   /* Otherwise, show we're calling alloca or equivalent.  */
1386   cfun->calls_alloca = 1;
1387 
1388   /* If stack usage info is requested, look into the size we are passed.
1389      We need to do so this early to avoid the obfuscation that may be
1390      introduced later by the various alignment operations.  */
1391   if (flag_stack_usage_info)
1392     {
1393       if (CONST_INT_P (size))
1394 	stack_usage_size = INTVAL (size);
1395       else if (REG_P (size))
1396         {
1397 	  /* Look into the last emitted insn and see if we can deduce
1398 	     something for the register.  */
1399 	  rtx_insn *insn;
1400 	  rtx set, note;
1401 	  insn = get_last_insn ();
1402 	  if ((set = single_set (insn)) && rtx_equal_p (SET_DEST (set), size))
1403 	    {
1404 	      if (CONST_INT_P (SET_SRC (set)))
1405 		stack_usage_size = INTVAL (SET_SRC (set));
1406 	      else if ((note = find_reg_equal_equiv_note (insn))
1407 		       && CONST_INT_P (XEXP (note, 0)))
1408 		stack_usage_size = INTVAL (XEXP (note, 0));
1409 	    }
1410 	}
1411 
1412       /* If the size is not constant, try the maximum size.  */
1413       if (stack_usage_size < 0)
1414 	stack_usage_size = max_size;
1415 
1416       /* If the size is still not constant, we can't say anything.  */
1417       if (stack_usage_size < 0)
1418 	{
1419 	  current_function_has_unbounded_dynamic_stack_size = 1;
1420 	  stack_usage_size = 0;
1421 	}
1422     }
1423 
1424   get_dynamic_stack_size (&size, size_align, required_align, &stack_usage_size);
1425 
1426   target = gen_reg_rtx (Pmode);
1427 
1428   /* The size is supposed to be fully adjusted at this point so record it
1429      if stack usage info is requested.  */
1430   if (flag_stack_usage_info)
1431     {
1432       current_function_dynamic_stack_size += stack_usage_size;
1433 
1434       /* ??? This is gross but the only safe stance in the absence
1435 	 of stack usage oriented flow analysis.  */
1436       if (!cannot_accumulate)
1437 	current_function_has_unbounded_dynamic_stack_size = 1;
1438     }
1439 
1440   do_pending_stack_adjust ();
1441 
1442   final_label = NULL;
1443   final_target = NULL_RTX;
1444 
1445   /* If we are splitting the stack, we need to ask the backend whether
1446      there is enough room on the current stack.  If there isn't, or if
1447      the backend doesn't know how to tell is, then we need to call a
1448      function to allocate memory in some other way.  This memory will
1449      be released when we release the current stack segment.  The
1450      effect is that stack allocation becomes less efficient, but at
1451      least it doesn't cause a stack overflow.  */
1452   if (flag_split_stack)
1453     {
1454       rtx_code_label *available_label;
1455       rtx ask, space, func;
1456 
1457       available_label = NULL;
1458 
1459       if (targetm.have_split_stack_space_check ())
1460 	{
1461 	  available_label = gen_label_rtx ();
1462 
1463 	  /* This instruction will branch to AVAILABLE_LABEL if there
1464 	     are SIZE bytes available on the stack.  */
1465 	  emit_insn (targetm.gen_split_stack_space_check
1466 		     (size, available_label));
1467 	}
1468 
1469       /* The __morestack_allocate_stack_space function will allocate
1470 	 memory using malloc.  If the alignment of the memory returned
1471 	 by malloc does not meet REQUIRED_ALIGN, we increase SIZE to
1472 	 make sure we allocate enough space.  */
1473       if (MALLOC_ABI_ALIGNMENT >= required_align)
1474 	ask = size;
1475       else
1476 	ask = expand_binop (Pmode, add_optab, size,
1477 			    gen_int_mode (required_align / BITS_PER_UNIT - 1,
1478 					  Pmode),
1479 			    NULL_RTX, 1, OPTAB_LIB_WIDEN);
1480 
1481       func = init_one_libfunc ("__morestack_allocate_stack_space");
1482 
1483       space = emit_library_call_value (func, target, LCT_NORMAL, Pmode,
1484 				       ask, Pmode);
1485 
1486       if (available_label == NULL_RTX)
1487 	return space;
1488 
1489       final_target = gen_reg_rtx (Pmode);
1490 
1491       emit_move_insn (final_target, space);
1492 
1493       final_label = gen_label_rtx ();
1494       emit_jump (final_label);
1495 
1496       emit_label (available_label);
1497     }
1498 
1499  /* We ought to be called always on the toplevel and stack ought to be aligned
1500     properly.  */
1501   gcc_assert (multiple_p (stack_pointer_delta,
1502 			  PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT));
1503 
1504   /* If needed, check that we have the required amount of stack.  Take into
1505      account what has already been checked.  */
1506   if (STACK_CHECK_MOVING_SP)
1507     ;
1508   else if (flag_stack_check == GENERIC_STACK_CHECK)
1509     probe_stack_range (STACK_OLD_CHECK_PROTECT + STACK_CHECK_MAX_FRAME_SIZE,
1510 		       size);
1511   else if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK)
1512     probe_stack_range (get_stack_check_protect (), size);
1513 
1514   /* Don't let anti_adjust_stack emit notes.  */
1515   suppress_reg_args_size = true;
1516 
1517   /* Perform the required allocation from the stack.  Some systems do
1518      this differently than simply incrementing/decrementing from the
1519      stack pointer, such as acquiring the space by calling malloc().  */
1520   if (targetm.have_allocate_stack ())
1521     {
1522       class expand_operand ops[2];
1523       /* We don't have to check against the predicate for operand 0 since
1524 	 TARGET is known to be a pseudo of the proper mode, which must
1525 	 be valid for the operand.  */
1526       create_fixed_operand (&ops[0], target);
1527       create_convert_operand_to (&ops[1], size, STACK_SIZE_MODE, true);
1528       expand_insn (targetm.code_for_allocate_stack, 2, ops);
1529     }
1530   else
1531     {
1532       poly_int64 saved_stack_pointer_delta;
1533 
1534       if (!STACK_GROWS_DOWNWARD)
1535 	emit_move_insn (target, virtual_stack_dynamic_rtx);
1536 
1537       /* Check stack bounds if necessary.  */
1538       if (crtl->limit_stack)
1539 	{
1540 	  rtx available;
1541 	  rtx_code_label *space_available = gen_label_rtx ();
1542 	  if (STACK_GROWS_DOWNWARD)
1543 	    available = expand_binop (Pmode, sub_optab,
1544 				      stack_pointer_rtx, stack_limit_rtx,
1545 				      NULL_RTX, 1, OPTAB_WIDEN);
1546 	  else
1547 	    available = expand_binop (Pmode, sub_optab,
1548 				      stack_limit_rtx, stack_pointer_rtx,
1549 				      NULL_RTX, 1, OPTAB_WIDEN);
1550 
1551 	  emit_cmp_and_jump_insns (available, size, GEU, NULL_RTX, Pmode, 1,
1552 				   space_available);
1553 	  if (targetm.have_trap ())
1554 	    emit_insn (targetm.gen_trap ());
1555 	  else
1556 	    error ("stack limits not supported on this target");
1557 	  emit_barrier ();
1558 	  emit_label (space_available);
1559 	}
1560 
1561       saved_stack_pointer_delta = stack_pointer_delta;
1562 
1563       /* If stack checking or stack clash protection is requested,
1564 	 then probe the stack while allocating space from it.  */
1565       if (flag_stack_check && STACK_CHECK_MOVING_SP)
1566 	anti_adjust_stack_and_probe (size, false);
1567       else if (flag_stack_clash_protection)
1568 	anti_adjust_stack_and_probe_stack_clash (size);
1569       else
1570 	anti_adjust_stack (size);
1571 
1572       /* Even if size is constant, don't modify stack_pointer_delta.
1573 	 The constant size alloca should preserve
1574 	 crtl->preferred_stack_boundary alignment.  */
1575       stack_pointer_delta = saved_stack_pointer_delta;
1576 
1577       if (STACK_GROWS_DOWNWARD)
1578 	emit_move_insn (target, virtual_stack_dynamic_rtx);
1579     }
1580 
1581   suppress_reg_args_size = false;
1582 
1583   /* Finish up the split stack handling.  */
1584   if (final_label != NULL_RTX)
1585     {
1586       gcc_assert (flag_split_stack);
1587       emit_move_insn (final_target, target);
1588       emit_label (final_label);
1589       target = final_target;
1590     }
1591 
1592   target = align_dynamic_address (target, required_align);
1593 
1594   /* Now that we've committed to a return value, mark its alignment.  */
1595   mark_reg_pointer (target, required_align);
1596 
1597   /* Record the new stack level.  */
1598   record_new_stack_level ();
1599 
1600   return target;
1601 }
1602 
1603 /* Return an rtx representing the address of an area of memory already
1604    statically pushed onto the stack in the virtual stack vars area.  (It is
1605    assumed that the area is allocated in the function prologue.)
1606 
1607    Any required stack pointer alignment is preserved.
1608 
1609    OFFSET is the offset of the area into the virtual stack vars area.
1610 
1611    REQUIRED_ALIGN is the alignment (in bits) required for the region
1612    of memory.
1613 
1614    BASE is the rtx of the base of this virtual stack vars area.
1615    The only time this is not `virtual_stack_vars_rtx` is when tagging pointers
1616    on the stack.  */
1617 
1618 rtx
get_dynamic_stack_base(poly_int64 offset,unsigned required_align,rtx base)1619 get_dynamic_stack_base (poly_int64 offset, unsigned required_align, rtx base)
1620 {
1621   rtx target;
1622 
1623   if (crtl->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
1624     crtl->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
1625 
1626   target = gen_reg_rtx (Pmode);
1627   emit_move_insn (target, base);
1628   target = expand_binop (Pmode, add_optab, target,
1629 			 gen_int_mode (offset, Pmode),
1630 			 NULL_RTX, 1, OPTAB_LIB_WIDEN);
1631   target = align_dynamic_address (target, required_align);
1632 
1633   /* Now that we've committed to a return value, mark its alignment.  */
1634   mark_reg_pointer (target, required_align);
1635 
1636   return target;
1637 }
1638 
1639 /* A front end may want to override GCC's stack checking by providing a
1640    run-time routine to call to check the stack, so provide a mechanism for
1641    calling that routine.  */
1642 
1643 static GTY(()) rtx stack_check_libfunc;
1644 
1645 void
set_stack_check_libfunc(const char * libfunc_name)1646 set_stack_check_libfunc (const char *libfunc_name)
1647 {
1648   gcc_assert (stack_check_libfunc == NULL_RTX);
1649   stack_check_libfunc = gen_rtx_SYMBOL_REF (Pmode, libfunc_name);
1650   tree ptype
1651     = Pmode == ptr_mode
1652       ? ptr_type_node
1653       : lang_hooks.types.type_for_mode (Pmode, 1);
1654   tree ftype
1655     = build_function_type_list (void_type_node, ptype, NULL_TREE);
1656   tree decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
1657 			  get_identifier (libfunc_name), ftype);
1658   DECL_EXTERNAL (decl) = 1;
1659   SET_SYMBOL_REF_DECL (stack_check_libfunc, decl);
1660 }
1661 
1662 /* Emit one stack probe at ADDRESS, an address within the stack.  */
1663 
1664 void
emit_stack_probe(rtx address)1665 emit_stack_probe (rtx address)
1666 {
1667   if (targetm.have_probe_stack_address ())
1668     {
1669       class expand_operand ops[1];
1670       insn_code icode = targetm.code_for_probe_stack_address;
1671       create_address_operand (ops, address);
1672       maybe_legitimize_operands (icode, 0, 1, ops);
1673       expand_insn (icode, 1, ops);
1674     }
1675   else
1676     {
1677       rtx memref = gen_rtx_MEM (word_mode, address);
1678 
1679       MEM_VOLATILE_P (memref) = 1;
1680       memref = validize_mem (memref);
1681 
1682       /* See if we have an insn to probe the stack.  */
1683       if (targetm.have_probe_stack ())
1684 	emit_insn (targetm.gen_probe_stack (memref));
1685       else
1686 	emit_move_insn (memref, const0_rtx);
1687     }
1688 }
1689 
1690 /* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive.
1691    FIRST is a constant and size is a Pmode RTX.  These are offsets from
1692    the current stack pointer.  STACK_GROWS_DOWNWARD says whether to add
1693    or subtract them from the stack pointer.  */
1694 
1695 #define PROBE_INTERVAL (1 << STACK_CHECK_PROBE_INTERVAL_EXP)
1696 
1697 #if STACK_GROWS_DOWNWARD
1698 #define STACK_GROW_OP MINUS
1699 #define STACK_GROW_OPTAB sub_optab
1700 #define STACK_GROW_OFF(off) -(off)
1701 #else
1702 #define STACK_GROW_OP PLUS
1703 #define STACK_GROW_OPTAB add_optab
1704 #define STACK_GROW_OFF(off) (off)
1705 #endif
1706 
1707 void
probe_stack_range(HOST_WIDE_INT first,rtx size)1708 probe_stack_range (HOST_WIDE_INT first, rtx size)
1709 {
1710   /* First ensure SIZE is Pmode.  */
1711   if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode)
1712     size = convert_to_mode (Pmode, size, 1);
1713 
1714   /* Next see if we have a function to check the stack.  */
1715   if (stack_check_libfunc)
1716     {
1717       rtx addr = memory_address (Pmode,
1718 				 gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
1719 					         stack_pointer_rtx,
1720 					         plus_constant (Pmode,
1721 								size, first)));
1722       emit_library_call (stack_check_libfunc, LCT_THROW, VOIDmode,
1723 			 addr, Pmode);
1724     }
1725 
1726   /* Next see if we have an insn to check the stack.  */
1727   else if (targetm.have_check_stack ())
1728     {
1729       class expand_operand ops[1];
1730       rtx addr = memory_address (Pmode,
1731 				 gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
1732 					         stack_pointer_rtx,
1733 					         plus_constant (Pmode,
1734 								size, first)));
1735       bool success;
1736       create_input_operand (&ops[0], addr, Pmode);
1737       success = maybe_expand_insn (targetm.code_for_check_stack, 1, ops);
1738       gcc_assert (success);
1739     }
1740 
1741   /* Otherwise we have to generate explicit probes.  If we have a constant
1742      small number of them to generate, that's the easy case.  */
1743   else if (CONST_INT_P (size) && INTVAL (size) < 7 * PROBE_INTERVAL)
1744     {
1745       HOST_WIDE_INT isize = INTVAL (size), i;
1746       rtx addr;
1747 
1748       /* Probe at FIRST + N * PROBE_INTERVAL for values of N from 1 until
1749 	 it exceeds SIZE.  If only one probe is needed, this will not
1750 	 generate any code.  Then probe at FIRST + SIZE.  */
1751       for (i = PROBE_INTERVAL; i < isize; i += PROBE_INTERVAL)
1752 	{
1753 	  addr = memory_address (Pmode,
1754 				 plus_constant (Pmode, stack_pointer_rtx,
1755 				 		STACK_GROW_OFF (first + i)));
1756 	  emit_stack_probe (addr);
1757 	}
1758 
1759       addr = memory_address (Pmode,
1760 			     plus_constant (Pmode, stack_pointer_rtx,
1761 					    STACK_GROW_OFF (first + isize)));
1762       emit_stack_probe (addr);
1763     }
1764 
1765   /* In the variable case, do the same as above, but in a loop.  Note that we
1766      must be extra careful with variables wrapping around because we might be
1767      at the very top (or the very bottom) of the address space and we have to
1768      be able to handle this case properly; in particular, we use an equality
1769      test for the loop condition.  */
1770   else
1771     {
1772       rtx rounded_size, rounded_size_op, test_addr, last_addr, temp;
1773       rtx_code_label *loop_lab = gen_label_rtx ();
1774       rtx_code_label *end_lab = gen_label_rtx ();
1775 
1776       /* Step 1: round SIZE to the previous multiple of the interval.  */
1777 
1778       /* ROUNDED_SIZE = SIZE & -PROBE_INTERVAL  */
1779       rounded_size
1780 	= simplify_gen_binary (AND, Pmode, size,
1781 			       gen_int_mode (-PROBE_INTERVAL, Pmode));
1782       rounded_size_op = force_operand (rounded_size, NULL_RTX);
1783 
1784 
1785       /* Step 2: compute initial and final value of the loop counter.  */
1786 
1787       /* TEST_ADDR = SP + FIRST.  */
1788       test_addr = force_operand (gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
1789 					 	 stack_pointer_rtx,
1790 						 gen_int_mode (first, Pmode)),
1791 				 NULL_RTX);
1792 
1793       /* LAST_ADDR = SP + FIRST + ROUNDED_SIZE.  */
1794       last_addr = force_operand (gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
1795 						 test_addr,
1796 						 rounded_size_op), NULL_RTX);
1797 
1798 
1799       /* Step 3: the loop
1800 
1801 	 while (TEST_ADDR != LAST_ADDR)
1802 	   {
1803 	     TEST_ADDR = TEST_ADDR + PROBE_INTERVAL
1804 	     probe at TEST_ADDR
1805 	   }
1806 
1807 	 probes at FIRST + N * PROBE_INTERVAL for values of N from 1
1808 	 until it is equal to ROUNDED_SIZE.  */
1809 
1810       emit_label (loop_lab);
1811 
1812       /* Jump to END_LAB if TEST_ADDR == LAST_ADDR.  */
1813       emit_cmp_and_jump_insns (test_addr, last_addr, EQ, NULL_RTX, Pmode, 1,
1814 			       end_lab);
1815 
1816       /* TEST_ADDR = TEST_ADDR + PROBE_INTERVAL.  */
1817       temp = expand_binop (Pmode, STACK_GROW_OPTAB, test_addr,
1818 			   gen_int_mode (PROBE_INTERVAL, Pmode), test_addr,
1819 			   1, OPTAB_WIDEN);
1820 
1821       gcc_assert (temp == test_addr);
1822 
1823       /* Probe at TEST_ADDR.  */
1824       emit_stack_probe (test_addr);
1825 
1826       emit_jump (loop_lab);
1827 
1828       emit_label (end_lab);
1829 
1830 
1831       /* Step 4: probe at FIRST + SIZE if we cannot assert at compile-time
1832 	 that SIZE is equal to ROUNDED_SIZE.  */
1833 
1834       /* TEMP = SIZE - ROUNDED_SIZE.  */
1835       temp = simplify_gen_binary (MINUS, Pmode, size, rounded_size);
1836       if (temp != const0_rtx)
1837 	{
1838 	  rtx addr;
1839 
1840 	  if (CONST_INT_P (temp))
1841 	    {
1842 	      /* Use [base + disp} addressing mode if supported.  */
1843 	      HOST_WIDE_INT offset = INTVAL (temp);
1844 	      addr = memory_address (Pmode,
1845 				     plus_constant (Pmode, last_addr,
1846 						    STACK_GROW_OFF (offset)));
1847 	    }
1848 	  else
1849 	    {
1850 	      /* Manual CSE if the difference is not known at compile-time.  */
1851 	      temp = gen_rtx_MINUS (Pmode, size, rounded_size_op);
1852 	      addr = memory_address (Pmode,
1853 				     gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
1854 						     last_addr, temp));
1855 	    }
1856 
1857 	  emit_stack_probe (addr);
1858 	}
1859     }
1860 
1861   /* Make sure nothing is scheduled before we are done.  */
1862   emit_insn (gen_blockage ());
1863 }
1864 
1865 /* Compute parameters for stack clash probing a dynamic stack
1866    allocation of SIZE bytes.
1867 
1868    We compute ROUNDED_SIZE, LAST_ADDR, RESIDUAL and PROBE_INTERVAL.
1869 
1870    Additionally we conditionally dump the type of probing that will
1871    be needed given the values computed.  */
1872 
1873 void
compute_stack_clash_protection_loop_data(rtx * rounded_size,rtx * last_addr,rtx * residual,HOST_WIDE_INT * probe_interval,rtx size)1874 compute_stack_clash_protection_loop_data (rtx *rounded_size, rtx *last_addr,
1875 					  rtx *residual,
1876 					  HOST_WIDE_INT *probe_interval,
1877 					  rtx size)
1878 {
1879   /* Round SIZE down to STACK_CLASH_PROTECTION_PROBE_INTERVAL */
1880   *probe_interval
1881     = 1 << param_stack_clash_protection_probe_interval;
1882   *rounded_size = simplify_gen_binary (AND, Pmode, size,
1883 				        GEN_INT (-*probe_interval));
1884 
1885   /* Compute the value of the stack pointer for the last iteration.
1886      It's just SP + ROUNDED_SIZE.  */
1887   rtx rounded_size_op = force_operand (*rounded_size, NULL_RTX);
1888   *last_addr = force_operand (gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
1889 					      stack_pointer_rtx,
1890 					      rounded_size_op),
1891 			      NULL_RTX);
1892 
1893   /* Compute any residuals not allocated by the loop above.  Residuals
1894      are just the ROUNDED_SIZE - SIZE.  */
1895   *residual = simplify_gen_binary (MINUS, Pmode, size, *rounded_size);
1896 
1897   /* Dump key information to make writing tests easy.  */
1898   if (dump_file)
1899     {
1900       if (*rounded_size == CONST0_RTX (Pmode))
1901 	fprintf (dump_file,
1902 		 "Stack clash skipped dynamic allocation and probing loop.\n");
1903       else if (CONST_INT_P (*rounded_size)
1904 	       && INTVAL (*rounded_size) <= 4 * *probe_interval)
1905 	fprintf (dump_file,
1906 		 "Stack clash dynamic allocation and probing inline.\n");
1907       else if (CONST_INT_P (*rounded_size))
1908 	fprintf (dump_file,
1909 		 "Stack clash dynamic allocation and probing in "
1910 		 "rotated loop.\n");
1911       else
1912 	fprintf (dump_file,
1913 		 "Stack clash dynamic allocation and probing in loop.\n");
1914 
1915       if (*residual != CONST0_RTX (Pmode))
1916 	fprintf (dump_file,
1917 		 "Stack clash dynamic allocation and probing residuals.\n");
1918       else
1919 	fprintf (dump_file,
1920 		 "Stack clash skipped dynamic allocation and "
1921 		 "probing residuals.\n");
1922     }
1923 }
1924 
1925 /* Emit the start of an allocate/probe loop for stack
1926    clash protection.
1927 
1928    LOOP_LAB and END_LAB are returned for use when we emit the
1929    end of the loop.
1930 
1931    LAST addr is the value for SP which stops the loop.  */
1932 void
emit_stack_clash_protection_probe_loop_start(rtx * loop_lab,rtx * end_lab,rtx last_addr,bool rotated)1933 emit_stack_clash_protection_probe_loop_start (rtx *loop_lab,
1934 					      rtx *end_lab,
1935 					      rtx last_addr,
1936 					      bool rotated)
1937 {
1938   /* Essentially we want to emit any setup code, the top of loop
1939      label and the comparison at the top of the loop.  */
1940   *loop_lab = gen_label_rtx ();
1941   *end_lab = gen_label_rtx ();
1942 
1943   emit_label (*loop_lab);
1944   if (!rotated)
1945     emit_cmp_and_jump_insns (stack_pointer_rtx, last_addr, EQ, NULL_RTX,
1946 			     Pmode, 1, *end_lab);
1947 }
1948 
1949 /* Emit the end of a stack clash probing loop.
1950 
1951    This consists of just the jump back to LOOP_LAB and
1952    emitting END_LOOP after the loop.  */
1953 
1954 void
emit_stack_clash_protection_probe_loop_end(rtx loop_lab,rtx end_loop,rtx last_addr,bool rotated)1955 emit_stack_clash_protection_probe_loop_end (rtx loop_lab, rtx end_loop,
1956 					    rtx last_addr, bool rotated)
1957 {
1958   if (rotated)
1959     emit_cmp_and_jump_insns (stack_pointer_rtx, last_addr, NE, NULL_RTX,
1960 			     Pmode, 1, loop_lab);
1961   else
1962     emit_jump (loop_lab);
1963 
1964   emit_label (end_loop);
1965 
1966 }
1967 
1968 /* Adjust the stack pointer by minus SIZE (an rtx for a number of bytes)
1969    while probing it.  This pushes when SIZE is positive.  SIZE need not
1970    be constant.
1971 
1972    This is subtly different than anti_adjust_stack_and_probe to try and
1973    prevent stack-clash attacks
1974 
1975      1. It must assume no knowledge of the probing state, any allocation
1976 	must probe.
1977 
1978 	Consider the case of a 1 byte alloca in a loop.  If the sum of the
1979 	allocations is large, then this could be used to jump the guard if
1980 	probes were not emitted.
1981 
1982      2. It never skips probes, whereas anti_adjust_stack_and_probe will
1983 	skip the probe on the first PROBE_INTERVAL on the assumption it
1984 	was already done in the prologue and in previous allocations.
1985 
1986      3. It only allocates and probes SIZE bytes, it does not need to
1987 	allocate/probe beyond that because this probing style does not
1988 	guarantee signal handling capability if the guard is hit.  */
1989 
1990 void
anti_adjust_stack_and_probe_stack_clash(rtx size)1991 anti_adjust_stack_and_probe_stack_clash (rtx size)
1992 {
1993   /* First ensure SIZE is Pmode.  */
1994   if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode)
1995     size = convert_to_mode (Pmode, size, 1);
1996 
1997   /* We can get here with a constant size on some targets.  */
1998   rtx rounded_size, last_addr, residual;
1999   HOST_WIDE_INT probe_interval, probe_range;
2000   bool target_probe_range_p = false;
2001   compute_stack_clash_protection_loop_data (&rounded_size, &last_addr,
2002 					    &residual, &probe_interval, size);
2003 
2004   /* Get the back-end specific probe ranges.  */
2005   probe_range = targetm.stack_clash_protection_alloca_probe_range ();
2006   target_probe_range_p = probe_range != 0;
2007   gcc_assert (probe_range >= 0);
2008 
2009   /* If no back-end specific range defined, default to the top of the newly
2010      allocated range.  */
2011   if (probe_range == 0)
2012     probe_range = probe_interval - GET_MODE_SIZE (word_mode);
2013 
2014   if (rounded_size != CONST0_RTX (Pmode))
2015     {
2016       if (CONST_INT_P (rounded_size)
2017 	  && INTVAL (rounded_size) <= 4 * probe_interval)
2018 	{
2019 	  for (HOST_WIDE_INT i = 0;
2020 	       i < INTVAL (rounded_size);
2021 	       i += probe_interval)
2022 	    {
2023 	      anti_adjust_stack (GEN_INT (probe_interval));
2024 	      /* The prologue does not probe residuals.  Thus the offset
2025 		 here to probe just beyond what the prologue had already
2026 		 allocated.  */
2027 	      emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
2028 					       probe_range));
2029 
2030 	      emit_insn (gen_blockage ());
2031 	    }
2032 	}
2033       else
2034 	{
2035 	  rtx loop_lab, end_loop;
2036 	  bool rotate_loop = CONST_INT_P (rounded_size);
2037 	  emit_stack_clash_protection_probe_loop_start (&loop_lab, &end_loop,
2038 							last_addr, rotate_loop);
2039 
2040 	  anti_adjust_stack (GEN_INT (probe_interval));
2041 
2042 	  /* The prologue does not probe residuals.  Thus the offset here
2043 	     to probe just beyond what the prologue had already
2044 	     allocated.  */
2045 	  emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx,
2046 					   probe_range));
2047 
2048 	  emit_stack_clash_protection_probe_loop_end (loop_lab, end_loop,
2049 						      last_addr, rotate_loop);
2050 	  emit_insn (gen_blockage ());
2051 	}
2052     }
2053 
2054   if (residual != CONST0_RTX (Pmode))
2055     {
2056       rtx label = NULL_RTX;
2057       /* RESIDUAL could be zero at runtime and in that case *sp could
2058 	 hold live data.  Furthermore, we do not want to probe into the
2059 	 red zone.
2060 
2061 	 If TARGET_PROBE_RANGE_P then the target has promised it's safe to
2062 	 probe at offset 0.  In which case we no longer have to check for
2063 	 RESIDUAL == 0.  However we still need to probe at the right offset
2064 	 when RESIDUAL > PROBE_RANGE, in which case we probe at PROBE_RANGE.
2065 
2066 	 If !TARGET_PROBE_RANGE_P then go ahead and just guard the probe at *sp
2067 	 on RESIDUAL != 0 at runtime if RESIDUAL is not a compile time constant.
2068 	 */
2069       anti_adjust_stack (residual);
2070 
2071       if (!CONST_INT_P (residual))
2072 	{
2073 	  label = gen_label_rtx ();
2074 	  rtx_code op = target_probe_range_p ? LT : EQ;
2075 	  rtx probe_cmp_value = target_probe_range_p
2076 	    ? gen_rtx_CONST_INT (GET_MODE (residual), probe_range)
2077 	    : CONST0_RTX (GET_MODE (residual));
2078 
2079 	  if (target_probe_range_p)
2080 	    emit_stack_probe (stack_pointer_rtx);
2081 
2082 	  emit_cmp_and_jump_insns (residual, probe_cmp_value,
2083 				   op, NULL_RTX, Pmode, 1, label);
2084 	}
2085 
2086       rtx x = NULL_RTX;
2087 
2088       /* If RESIDUAL isn't a constant and TARGET_PROBE_RANGE_P then we probe up
2089 	 by the ABI defined safe value.  */
2090       if (!CONST_INT_P (residual) && target_probe_range_p)
2091 	x = GEN_INT (probe_range);
2092       /* If RESIDUAL is a constant but smaller than the ABI defined safe value,
2093 	 we still want to probe up, but the safest amount if a word.  */
2094       else if (target_probe_range_p)
2095 	{
2096 	  if (INTVAL (residual) <= probe_range)
2097 	    x = GEN_INT (GET_MODE_SIZE (word_mode));
2098 	  else
2099 	    x = GEN_INT (probe_range);
2100 	}
2101       else
2102       /* If nothing else, probe at the top of the new allocation.  */
2103 	x = plus_constant (Pmode, residual, -GET_MODE_SIZE (word_mode));
2104 
2105       emit_stack_probe (gen_rtx_PLUS (Pmode, stack_pointer_rtx, x));
2106 
2107       emit_insn (gen_blockage ());
2108       if (!CONST_INT_P (residual))
2109 	  emit_label (label);
2110     }
2111 }
2112 
2113 
2114 /* Adjust the stack pointer by minus SIZE (an rtx for a number of bytes)
2115    while probing it.  This pushes when SIZE is positive.  SIZE need not
2116    be constant.  If ADJUST_BACK is true, adjust back the stack pointer
2117    by plus SIZE at the end.  */
2118 
2119 void
anti_adjust_stack_and_probe(rtx size,bool adjust_back)2120 anti_adjust_stack_and_probe (rtx size, bool adjust_back)
2121 {
2122   /* We skip the probe for the first interval + a small dope of 4 words and
2123      probe that many bytes past the specified size to maintain a protection
2124      area at the botton of the stack.  */
2125   const int dope = 4 * UNITS_PER_WORD;
2126 
2127   /* First ensure SIZE is Pmode.  */
2128   if (GET_MODE (size) != VOIDmode && GET_MODE (size) != Pmode)
2129     size = convert_to_mode (Pmode, size, 1);
2130 
2131   /* If we have a constant small number of probes to generate, that's the
2132      easy case.  */
2133   if (CONST_INT_P (size) && INTVAL (size) < 7 * PROBE_INTERVAL)
2134     {
2135       HOST_WIDE_INT isize = INTVAL (size), i;
2136       bool first_probe = true;
2137 
2138       /* Adjust SP and probe at PROBE_INTERVAL + N * PROBE_INTERVAL for
2139 	 values of N from 1 until it exceeds SIZE.  If only one probe is
2140 	 needed, this will not generate any code.  Then adjust and probe
2141 	 to PROBE_INTERVAL + SIZE.  */
2142       for (i = PROBE_INTERVAL; i < isize; i += PROBE_INTERVAL)
2143 	{
2144 	  if (first_probe)
2145 	    {
2146 	      anti_adjust_stack (GEN_INT (2 * PROBE_INTERVAL + dope));
2147 	      first_probe = false;
2148 	    }
2149 	  else
2150 	    anti_adjust_stack (GEN_INT (PROBE_INTERVAL));
2151 	  emit_stack_probe (stack_pointer_rtx);
2152 	}
2153 
2154       if (first_probe)
2155 	anti_adjust_stack (plus_constant (Pmode, size, PROBE_INTERVAL + dope));
2156       else
2157 	anti_adjust_stack (plus_constant (Pmode, size, PROBE_INTERVAL - i));
2158       emit_stack_probe (stack_pointer_rtx);
2159     }
2160 
2161   /* In the variable case, do the same as above, but in a loop.  Note that we
2162      must be extra careful with variables wrapping around because we might be
2163      at the very top (or the very bottom) of the address space and we have to
2164      be able to handle this case properly; in particular, we use an equality
2165      test for the loop condition.  */
2166   else
2167     {
2168       rtx rounded_size, rounded_size_op, last_addr, temp;
2169       rtx_code_label *loop_lab = gen_label_rtx ();
2170       rtx_code_label *end_lab = gen_label_rtx ();
2171 
2172 
2173       /* Step 1: round SIZE to the previous multiple of the interval.  */
2174 
2175       /* ROUNDED_SIZE = SIZE & -PROBE_INTERVAL  */
2176       rounded_size
2177 	= simplify_gen_binary (AND, Pmode, size,
2178 			       gen_int_mode (-PROBE_INTERVAL, Pmode));
2179       rounded_size_op = force_operand (rounded_size, NULL_RTX);
2180 
2181 
2182       /* Step 2: compute initial and final value of the loop counter.  */
2183 
2184       /* SP = SP_0 + PROBE_INTERVAL.  */
2185       anti_adjust_stack (GEN_INT (PROBE_INTERVAL + dope));
2186 
2187       /* LAST_ADDR = SP_0 + PROBE_INTERVAL + ROUNDED_SIZE.  */
2188       last_addr = force_operand (gen_rtx_fmt_ee (STACK_GROW_OP, Pmode,
2189 						 stack_pointer_rtx,
2190 						 rounded_size_op), NULL_RTX);
2191 
2192 
2193       /* Step 3: the loop
2194 
2195 	 while (SP != LAST_ADDR)
2196 	   {
2197 	     SP = SP + PROBE_INTERVAL
2198 	     probe at SP
2199 	   }
2200 
2201 	 adjusts SP and probes at PROBE_INTERVAL + N * PROBE_INTERVAL for
2202 	 values of N from 1 until it is equal to ROUNDED_SIZE.  */
2203 
2204       emit_label (loop_lab);
2205 
2206       /* Jump to END_LAB if SP == LAST_ADDR.  */
2207       emit_cmp_and_jump_insns (stack_pointer_rtx, last_addr, EQ, NULL_RTX,
2208 			       Pmode, 1, end_lab);
2209 
2210       /* SP = SP + PROBE_INTERVAL and probe at SP.  */
2211       anti_adjust_stack (GEN_INT (PROBE_INTERVAL));
2212       emit_stack_probe (stack_pointer_rtx);
2213 
2214       emit_jump (loop_lab);
2215 
2216       emit_label (end_lab);
2217 
2218 
2219       /* Step 4: adjust SP and probe at PROBE_INTERVAL + SIZE if we cannot
2220 	 assert at compile-time that SIZE is equal to ROUNDED_SIZE.  */
2221 
2222       /* TEMP = SIZE - ROUNDED_SIZE.  */
2223       temp = simplify_gen_binary (MINUS, Pmode, size, rounded_size);
2224       if (temp != const0_rtx)
2225 	{
2226 	  /* Manual CSE if the difference is not known at compile-time.  */
2227 	  if (GET_CODE (temp) != CONST_INT)
2228 	    temp = gen_rtx_MINUS (Pmode, size, rounded_size_op);
2229 	  anti_adjust_stack (temp);
2230 	  emit_stack_probe (stack_pointer_rtx);
2231 	}
2232     }
2233 
2234   /* Adjust back and account for the additional first interval.  */
2235   if (adjust_back)
2236     adjust_stack (plus_constant (Pmode, size, PROBE_INTERVAL + dope));
2237   else
2238     adjust_stack (GEN_INT (PROBE_INTERVAL + dope));
2239 }
2240 
2241 /* Return an rtx representing the register or memory location
2242    in which a scalar value of data type VALTYPE
2243    was returned by a function call to function FUNC.
2244    FUNC is a FUNCTION_DECL, FNTYPE a FUNCTION_TYPE node if the precise
2245    function is known, otherwise 0.
2246    OUTGOING is 1 if on a machine with register windows this function
2247    should return the register in which the function will put its result
2248    and 0 otherwise.  */
2249 
2250 rtx
hard_function_value(const_tree valtype,const_tree func,const_tree fntype,int outgoing ATTRIBUTE_UNUSED)2251 hard_function_value (const_tree valtype, const_tree func, const_tree fntype,
2252 		     int outgoing ATTRIBUTE_UNUSED)
2253 {
2254   rtx val;
2255 
2256   val = targetm.calls.function_value (valtype, func ? func : fntype, outgoing);
2257 
2258   if (REG_P (val)
2259       && GET_MODE (val) == BLKmode)
2260     {
2261       unsigned HOST_WIDE_INT bytes = arg_int_size_in_bytes (valtype);
2262       opt_scalar_int_mode tmpmode;
2263 
2264       /* int_size_in_bytes can return -1.  We don't need a check here
2265 	 since the value of bytes will then be large enough that no
2266 	 mode will match anyway.  */
2267 
2268       FOR_EACH_MODE_IN_CLASS (tmpmode, MODE_INT)
2269 	{
2270 	  /* Have we found a large enough mode?  */
2271 	  if (GET_MODE_SIZE (tmpmode.require ()) >= bytes)
2272 	    break;
2273 	}
2274 
2275       PUT_MODE (val, tmpmode.require ());
2276     }
2277   return val;
2278 }
2279 
2280 /* Return an rtx representing the register or memory location
2281    in which a scalar value of mode MODE was returned by a library call.  */
2282 
2283 rtx
hard_libcall_value(machine_mode mode,rtx fun)2284 hard_libcall_value (machine_mode mode, rtx fun)
2285 {
2286   return targetm.calls.libcall_value (mode, fun);
2287 }
2288 
2289 /* Look up the tree code for a given rtx code
2290    to provide the arithmetic operation for real_arithmetic.
2291    The function returns an int because the caller may not know
2292    what `enum tree_code' means.  */
2293 
2294 int
rtx_to_tree_code(enum rtx_code code)2295 rtx_to_tree_code (enum rtx_code code)
2296 {
2297   enum tree_code tcode;
2298 
2299   switch (code)
2300     {
2301     case PLUS:
2302       tcode = PLUS_EXPR;
2303       break;
2304     case MINUS:
2305       tcode = MINUS_EXPR;
2306       break;
2307     case MULT:
2308       tcode = MULT_EXPR;
2309       break;
2310     case DIV:
2311       tcode = RDIV_EXPR;
2312       break;
2313     case SMIN:
2314       tcode = MIN_EXPR;
2315       break;
2316     case SMAX:
2317       tcode = MAX_EXPR;
2318       break;
2319     default:
2320       tcode = LAST_AND_UNUSED_TREE_CODE;
2321       break;
2322     }
2323   return ((int) tcode);
2324 }
2325 
2326 #include "gt-explow.h"
2327