GCC Middle and Back End API Reference
Go to the documentation of this file.
1/* Exported functions from emit-rtl.cc
2 Copyright (C) 2004-2024 Free Software Foundation, Inc.
4This file is part of GCC.
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
20#ifndef GCC_EMIT_RTL_H
21#define GCC_EMIT_RTL_H
23class temp_slot;
24typedef class temp_slot *temp_slot_p;
26namespace rtl_ssa { class function_info; }
28/* Information mainlined about RTL representation of incoming arguments. */
29struct GTY(()) incoming_args {
30 /* Number of bytes of args popped by function being compiled on its return.
31 Zero if no bytes are to be popped.
32 May affect compilation of return insn or of function epilogue. */
35 /* If function's args have a fixed size, this is that size, in bytes.
36 Otherwise, it is -1.
37 May affect compilation of return insn or of function epilogue. */
40 /* # bytes the prologue should push and pretend that the caller pushed them.
41 The prologue must do this, but only if parms can be passed in
42 registers. */
45 /* This is the offset from the arg pointer to the place where the first
46 anonymous arg can be found, if there is one. */
49 /* Quantities of various kinds of registers
50 used for the current function's args. */
53 /* The arg pointer hard register, or the pseudo into which it was copied. */
58/* Datastructures maintained for currently processed function in RTL form. */
59struct GTY(()) rtl_data {
60 void init_stack_alignment ();
64 struct varasm_status varasm;
65 struct incoming_args args;
66 struct function_subsections subsections;
67 struct rtl_eh eh;
69 /* The ABI of the function, i.e. the interface it presents to its callers.
70 This is the ABI that should be queried to see which registers the
71 function needs to save before it uses them.
73 Other functions (including those called by this function) might use
74 different ABIs. */
77 rtl_ssa::function_info *GTY((skip)) ssa;
79 /* For function.cc */
81 /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is
82 defined, the needed space is pushed by the prologue. */
85 /* If nonzero, an RTL expression for the location at which the current
86 function returns its result. If the current function returns its
87 result in a register, current_function_return_rtx will always be
88 the hard register containing the result. */
91 /* Vector of initial-value pairs. Each pair consists of a pseudo
92 register of approprite mode that stores the initial value a hard
93 register REGNO, and that hard register itself. */
94 /* ??? This could be a VEC but there is currently no way to define an
95 opaque VEC type. */
98 /* A variable living at the top of the frame that holds a known value.
99 Used for detecting stack clobbers. */
102 /* The __stack_chk_guard variable or expression holding the stack
103 protector canary value. */
106 /* List (chain of INSN_LIST) of labels heading the current handlers for
107 nonlocal gotos. */
110 /* Label that will go on function epilogue.
111 Jumping to this label serves as a "return" instruction
112 on machines which require execution of the epilogue on all returns. */
115 /* Label that will go on the end of function epilogue.
116 Jumping to this label serves as a "naked return" instruction
117 on machines which require execution of the epilogue on all returns. */
120 /* List (chain of EXPR_LISTs) of all stack slots in this function.
121 Made for the sake of unshare_all_rtl. */
124 /* List of empty areas in the stack frame. */
127 /* Place after which to insert the tail_recursion_label if we need one. */
130 /* Location at which to save the argument pointer if it will need to be
131 referenced. There are two cases where this is done: if nonlocal gotos
132 exist, or if vars stored at an offset from the argument pointer will be
133 needed by inner routines. */
136 /* Dynamic Realign Argument Pointer used for realigning stack. */
139 /* Offset to end of allocated area of stack frame.
140 If stack grows down, this is the address of the last stack slot allocated.
141 If stack grows up, this is the address for the next slot. */
144 /* The function's FUNCTION_BEG note. */
147 /* Insn after which register parms and SAVE_EXPRs are born, if nonopt. */
150 /* List of all used temporaries allocated, by level. */
153 /* List of available temp slots. */
156 /* Current nesting level for temporaries. */
159 /* The largest alignment needed on the stack, including requirement
160 for outgoing stack alignment. */
163 /* Preferred alignment of the end of stack frame, which is preferred
164 to call other functions. */
167 /* The minimum alignment of parameter stack. */
170 /* The largest alignment of slot allocated on the stack. */
173 /* The stack alignment estimated before reload, with consideration of
174 following factors:
175 1. Alignment of local stack variables (max_used_stack_slot_alignment)
176 2. Alignment requirement to call other functions
177 (preferred_stack_boundary)
178 3. Alignment of non-local stack variables but might be spilled in
179 local stack. */
182 /* How many NOP insns to place at each function entry by default. */
183 unsigned short patch_area_size;
185 /* How far the real asm entry point is into this area. */
186 unsigned short patch_area_entry;
188 /* For reorg. */
190 /* Nonzero if function being compiled called builtin_return_addr or
191 builtin_frame_address with nonzero count. */
194 /* Nonzero if the function calls __builtin_eh_return. */
197 /* Nonzero if function saves all registers, e.g. if it has a nonlocal
198 label that can reach the exit block via non-exceptional paths. */
201 /* Nonzero if function being compiled has nonlocal gotos to parent
202 function. */
205 /* Nonzero if function being compiled has an asm statement. */
208 /* This bit is used by the exception handling logic. It is set if all
209 calls (if any) are sibling calls. Such functions do not have to
210 have EH tables generated, as they cannot throw. A call to such a
211 function, however, should be treated as throwing if any of its callees
212 can throw. */
215 /* Nonzero if stack limit checking should be enabled in the current
216 function. */
219 /* Nonzero if profiling code should be generated. */
222 /* Nonzero if the current function uses the constant pool. */
225 /* Nonzero if the current function uses pic_offset_table_rtx. */
228 /* Nonzero if the current function needs an lsda for exception handling. */
231 /* Set when the tail call has been produced. */
234 /* Nonzero if code to initialize arg_pointer_save_area has been emitted. */
237 /* Nonzero if current function must be given a frame pointer.
238 Set in reload1.cc or lra-eliminations.cc if anything is allocated
239 on the stack there. */
242 /* When set, expand should optimize for speed. */
245 /* Nonzero if function stack realignment is needed. This flag may be
246 set twice: before and after reload. It is set before reload wrt
247 stack alignment estimation before reload. It will be changed after
248 reload if by then criteria of stack realignment is different.
249 The value set after reload is the accurate one and is finalized. */
252 /* Nonzero if function stack realignment is tried. This flag is set
253 only once before reload. It affects register elimination. This
254 is used to generate DWARF debug info for stack variables. */
257 /* Nonzero if function being compiled needs dynamic realigned
258 argument pointer (drap) if stack needs realigning. */
261 /* Nonzero if function stack realignment estimation is done, namely
262 stack_realign_needed flag has been set before reload wrt estimated
263 stack alignment info. */
266 /* Nonzero if function stack realignment has been finalized, namely
267 stack_realign_needed flag has been set and finalized after reload. */
270 /* True if dbr_schedule has already been called for this function. */
273 /* True if current function cannot throw. Unlike
274 TREE_NOTHROW (current_function_decl) it is set even for overwritable
275 function where currently compiled version of it is nothrow. */
278 /* True if we performed shrink-wrapping for the current function. */
281 /* True if we performed shrink-wrapping for separate components for
282 the current function. */
285 /* Nonzero if function being compiled doesn't modify the stack pointer
286 (ignoring the prologue and epilogue). This is only valid after
287 pass_stack_ptr_mod has run. */
290 /* True if the stack pointer is clobbered by asm statement. */
293 /* Nonzero if function being compiled doesn't contain any calls
294 (ignoring the prologue and epilogue). This is set prior to
295 register allocation in IRA and is valid for the remaining
296 compiler passes. */
299 /* Nonzero if the function being compiled is a leaf function which only
300 uses leaf registers. This is valid after reload (specifically after
301 sched2) and is useful only if the port defines LEAF_REGISTERS. */
304 /* Nonzero if the function being compiled has undergone hot/cold partitioning
305 (under flag_reorder_blocks_and_partition) and has at least one cold
306 block. */
309 /* Nonzero if the function being compiled has completed the bb reordering
310 pass. */
313 /* Like regs_ever_live, but 1 if a reg is set or clobbered from an
314 asm. Unlike regs_ever_live, elements of this array corresponding
315 to eliminable regs (like the frame pointer) are set if an asm
316 sets them. */
319 /* All hard registers that need to be zeroed at the return of the routine. */
322 /* The highest address seen during shorten_branches. */
326#define return_label (crtl->x_return_label)
327#define naked_return_label (crtl->x_naked_return_label)
328#define stack_slot_list (crtl->x_stack_slot_list)
329#define function_beg_insn (crtl->x_function_beg_insn)
330#define parm_birth_insn (crtl->x_parm_birth_insn)
331#define frame_offset (crtl->x_frame_offset)
332#define stack_check_probe_note (crtl->x_stack_check_probe_note)
333#define arg_pointer_save_area (crtl->x_arg_pointer_save_area)
334#define used_temp_slots (crtl->x_used_temp_slots)
335#define avail_temp_slots (crtl->x_avail_temp_slots)
336#define temp_slot_level (crtl->x_temp_slot_level)
337#define nonlocal_goto_handler_labels (crtl->x_nonlocal_goto_handler_labels)
338#define frame_pointer_needed (crtl->frame_pointer_needed)
339#define stack_realign_fp (crtl->stack_realign_needed && !crtl->need_drap)
340#define stack_realign_drap (crtl->stack_realign_needed && crtl->need_drap)
342extern GTY(()) struct rtl_data x_rtl;
344/* Accessor to RTL datastructures. We keep them statically allocated now since
345 we never keep multiple functions. For threaded compiler we might however
346 want to do differently. */
347#define crtl (&x_rtl)
349/* Return whether two MEM_ATTRs are equal. */
350bool mem_attrs_eq_p (const class mem_attrs *, const class mem_attrs *);
352/* Set the alias set of MEM to SET. */
355/* Set the alignment of MEM to ALIGN bits. */
356extern void set_mem_align (rtx, unsigned int);
358/* Set the address space of MEM to ADDRSPACE. */
359extern void set_mem_addr_space (rtx, addr_space_t);
361/* Set the expr for MEM to EXPR. */
362extern void set_mem_expr (rtx, tree);
364/* Set the offset for MEM to OFFSET. */
365extern void set_mem_offset (rtx, poly_int64);
367/* Clear the offset recorded for MEM. */
368extern void clear_mem_offset (rtx);
370/* Set the size for MEM to SIZE. */
371extern void set_mem_size (rtx, poly_int64);
373/* Clear the size recorded for MEM. */
374extern void clear_mem_size (rtx);
376/* Set the attributes for MEM appropriate for a spill slot. */
377extern void set_mem_attrs_for_spill (rtx);
378extern tree get_spill_slot_decl (bool);
380/* Return a memory reference like MEMREF, but with its address changed to
381 ADDR. The caller is asserting that the actual piece of memory pointed
382 to is the same, just the form of the address is being changed, such as
383 by putting something into a register. */
384extern rtx replace_equiv_address (rtx, rtx, bool = false);
386/* Likewise, but the reference is not required to be valid. */
387extern rtx replace_equiv_address_nv (rtx, rtx, bool = false);
389extern rtx gen_blockage (void);
390extern rtvec gen_rtvec (int, ...);
391extern rtx copy_insn_1 (rtx);
392extern rtx copy_insn (rtx);
394extern rtx gen_int_mode (poly_int64, machine_mode);
396extern void set_reg_attrs_from_value (rtx, rtx);
397extern void set_reg_attrs_for_parm (rtx, rtx);
398extern void set_reg_attrs_for_decl_rtl (tree t, rtx x);
399extern void adjust_reg_mode (rtx, machine_mode);
401extern rtx gen_int_shift_amount (machine_mode, poly_int64);
403extern bool need_atomic_barrier_p (enum memmodel, bool);
405/* Return the current sequence. */
407inline struct sequence_stack *
410 return &crtl->emit.seq;
413/* Return the outermost sequence. */
415inline struct sequence_stack *
418 struct sequence_stack *seq, *top;
420 seq = get_current_sequence ();
421 do
422 {
423 top = seq;
424 seq = seq->next;
425 } while (seq);
426 return top;
429/* Return the first insn of the current sequence or current function. */
431inline rtx_insn *
434 return get_current_sequence ()->first;
437/* Specify a new insn as the first in the chain. */
439inline void
442 gcc_checking_assert (!insn || !PREV_INSN (insn));
443 get_current_sequence ()->first = insn;
446/* Return the last insn emitted in current sequence or current function. */
448inline rtx_insn *
451 return get_current_sequence ()->last;
454/* Specify a new insn as the last in the chain. */
456inline void
459 gcc_checking_assert (!insn || !NEXT_INSN (insn));
460 get_current_sequence ()->last = insn;
463/* Return a number larger than any instruction's uid in this function. */
465inline int
468 return crtl->emit.x_cur_insn_uid;
471extern bool valid_for_const_vector_p (machine_mode, rtx);
472extern rtx gen_const_vec_duplicate (machine_mode, rtx);
473extern rtx gen_vec_duplicate (machine_mode, rtx);
475extern rtx gen_const_vec_series (machine_mode, rtx, rtx);
476extern rtx gen_vec_series (machine_mode, rtx, rtx);
478extern void set_decl_incoming_rtl (tree, rtx, bool);
480/* Return a memory reference like MEMREF, but with its mode changed
481 to MODE and its address changed to ADDR.
482 (VOIDmode means don't change the mode.
483 NULL for ADDR means don't change the address.) */
484extern rtx change_address (rtx, machine_mode, rtx);
486/* Return a memory reference like MEMREF, but with its mode changed
487 to MODE and its address offset by OFFSET bytes. */
488#define adjust_address(MEMREF, MODE, OFFSET) \
489 adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 0, 0)
491/* Likewise, but the reference is not required to be valid. */
492#define adjust_address_nv(MEMREF, MODE, OFFSET) \
493 adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 0, 0)
495/* Return a memory reference like MEMREF, but with its mode changed
496 to MODE and its address offset by OFFSET bytes. Assume that it's
497 for a bitfield and conservatively drop the underlying object if we
498 cannot be sure to stay within its bounds. */
499#define adjust_bitfield_address(MEMREF, MODE, OFFSET) \
500 adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, 0)
502/* As for adjust_bitfield_address, but specify that the width of
503 BLKmode accesses is SIZE bytes. */
504#define adjust_bitfield_address_size(MEMREF, MODE, OFFSET, SIZE) \
505 adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, SIZE)
507/* Likewise, but the reference is not required to be valid. */
508#define adjust_bitfield_address_nv(MEMREF, MODE, OFFSET) \
509 adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 1, 0)
511/* Return a memory reference like MEMREF, but with its mode changed
512 to MODE and its address changed to ADDR, which is assumed to be
513 increased by OFFSET bytes from MEMREF. */
514#define adjust_automodify_address(MEMREF, MODE, ADDR, OFFSET) \
515 adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 1)
517/* Likewise, but the reference is not required to be valid. */
518#define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \
519 adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0)
521extern rtx adjust_address_1 (rtx, machine_mode, poly_int64, int, int,
522 int, poly_int64);
523extern rtx adjust_automodify_address_1 (rtx, machine_mode, rtx,
524 poly_int64, int);
526/* Class wrapping emit_autoinc which allows derived classes to control
527 how reload pseudos are created. */
530 /* Can be overriden by derived classes. */
531 virtual rtx get_reload_reg () const { return gen_reg_rtx (Pmode); }
533 /* Emit insns to reload VALUE into a new register. VALUE is an
534 auto-increment or auto-decrement RTX whose operand is a register or
535 memory location; so reloading involves incrementing that location.
537 AMOUNT is the number to increment or decrement by (always
538 positive and ignored for POST_MODIFY/PRE_MODIFY).
540 Return a pseudo containing the result. */
541 rtx emit_autoinc (rtx value, poly_int64 amount);
544/* Return a memory reference like MEM, but with the address reloaded into a
545 pseudo register. */
546extern rtx force_reload_address (rtx mem);
548/* Return a memory reference like MEMREF, but whose address is changed by
549 adding OFFSET, an RTX, to it. POW2 is the highest power of two factor
550 known to be in OFFSET (possibly 1). */
551extern rtx offset_address (rtx, rtx, unsigned HOST_WIDE_INT);
553/* Given REF, a MEM, and T, either the type of X or the expression
554 corresponding to REF, set the memory attributes. OBJECTP is nonzero
555 if we are making a new object of this type. */
556extern void set_mem_attributes (rtx, tree, int);
558/* Similar, except that BITPOS has not yet been applied to REF, so if
559 we alter MEM_OFFSET according to T then we should subtract BITPOS
560 expecting that it'll be added back in later. */
563/* Return OFFSET if XEXP (MEM, 0) - OFFSET is known to be ALIGN
564 bits aligned for 0 <= OFFSET < ALIGN / BITS_PER_UNIT, or
565 -1 if not known. */
566extern int get_mem_align_offset (rtx, unsigned int);
568/* Return a memory reference like MEMREF, but with its mode widened to
569 MODE and adjusted by OFFSET. */
570extern rtx widen_memory_access (rtx, machine_mode, poly_int64);
574#endif /* GCC_EMIT_RTL_H */
Definition genmatch.cc:845
Definition function.h:188
Definition gcov.cc:277
Definition rtl.h:153
Definition function-abi.h:35
Definition function.cc:564
unsigned char addr_space_t
Definition coretypes.h:175
const union tree_node * const_tree
Definition coretypes.h:98
#define GTY(x)
Definition coretypes.h:41
union tree_node * tree
Definition coretypes.h:97
int alias_set_type
Definition coretypes.h:340
rtx gen_reg_rtx(machine_mode mode)
Definition emit-rtl.cc:1172
rtx_insn * emit(rtx x, bool allow_barrier_p)
Definition emit-rtl.cc:5604
void set_mem_attributes_minus_bitpos(rtx, tree, int, poly_int64)
Definition emit-rtl.cc:1950
rtx adjust_automodify_address_1(rtx, machine_mode, rtx, poly_int64, int)
Definition emit-rtl.cc:2500
rtx gen_int_shift_amount(machine_mode, poly_int64)
Definition emit-rtl.cc:6766
rtx copy_insn_1(rtx)
Definition emit-rtl.cc:5801
int get_mem_align_offset(rtx, unsigned int)
Definition emit-rtl.cc:1863
rtx gen_vec_duplicate(machine_mode, rtx)
Definition emit-rtl.cc:6103
class temp_slot * temp_slot_p
Definition emit-rtl.h:24
int get_max_uid(void)
Definition emit-rtl.h:466
tree get_spill_slot_decl(bool)
Definition emit-rtl.cc:2801
void set_mem_expr(rtx, tree)
Definition emit-rtl.cc:2219
rtx gen_blockage(void)
Definition emit-rtl.cc:450
struct sequence_stack * get_current_sequence(void)
Definition emit-rtl.h:408
rtx gen_int_mode(poly_int64, machine_mode)
Definition emit-rtl.cc:544
void set_first_insn(rtx_insn *insn)
Definition emit-rtl.h:440
bool valid_for_const_vector_p(machine_mode, rtx)
Definition emit-rtl.cc:6080
rtx change_address(rtx, machine_mode, rtx)
Definition emit-rtl.cc:2322
void maybe_set_max_label_num(rtx_code_label *x)
Definition emit-rtl.cc:1541
bool need_atomic_barrier_p(enum memmodel, bool)
Definition emit-rtl.cc:6743
rtx_insn * copy_delay_slot_insn(rtx_insn *)
Definition emit-rtl.cc:5945
struct sequence_stack * get_topmost_sequence(void)
Definition emit-rtl.h:416
void set_mem_offset(rtx, poly_int64)
Definition emit-rtl.cc:2229
void clear_mem_size(rtx)
Definition emit-rtl.cc:2261
rtx force_reload_address(rtx mem)
Definition emit-rtl.cc:2700
#define crtl
Definition emit-rtl.h:347
struct rtl_data x_rtl
Definition emit-rtl.cc:83
rtx gen_const_vec_duplicate(machine_mode, rtx)
Definition emit-rtl.cc:6092
void set_reg_attrs_from_value(rtx, rtx)
Definition emit-rtl.cc:1312
void set_mem_align(rtx, unsigned int)
Definition emit-rtl.cc:2209
bool mem_expr_equal_p(const_tree, const_tree)
Definition emit-rtl.cc:1844
rtx adjust_address_1(rtx, machine_mode, poly_int64, int, int, int, poly_int64)
Definition emit-rtl.cc:2363
rtx gen_const_vec_series(machine_mode, rtx, rtx)
Definition emit-rtl.cc:6161
void set_mem_alias_set(rtx, alias_set_type)
Definition emit-rtl.cc:2187
void set_reg_attrs_for_parm(rtx, rtx)
Definition emit-rtl.cc:1376
void set_mem_attrs_for_spill(rtx)
Definition emit-rtl.cc:2834
void set_mem_size(rtx, poly_int64)
Definition emit-rtl.cc:2250
rtx_insn * get_last_insn(void)
Definition emit-rtl.h:449
rtx replace_equiv_address_nv(rtx, rtx, bool=false)
Definition emit-rtl.cc:2575
void set_mem_addr_space(rtx, addr_space_t)
Definition emit-rtl.cc:2199
void set_mem_attributes(rtx, tree, int)
Definition emit-rtl.cc:2179
void adjust_reg_mode(rtx, machine_mode)
Definition emit-rtl.cc:1302
rtx gen_vec_series(machine_mode, rtx, rtx)
Definition emit-rtl.cc:6179
rtx_insn * get_insns(void)
Definition emit-rtl.h:432
bool mem_attrs_eq_p(const class mem_attrs *, const class mem_attrs *)
Definition emit-rtl.cc:356
rtx copy_insn(rtx)
Definition emit-rtl.cc:5931
rtx replace_equiv_address(rtx, rtx, bool=false)
Definition emit-rtl.cc:2564
rtx widen_memory_access(rtx, machine_mode, poly_int64)
Definition emit-rtl.cc:2720
void set_decl_incoming_rtl(tree, rtx, bool)
Definition emit-rtl.cc:1458
void set_last_insn(rtx_insn *insn)
Definition emit-rtl.h:457
void set_reg_attrs_for_decl_rtl(tree t, rtx x)
Definition emit-rtl.cc:1400
rtx offset_address(rtx, rtx, unsigned HOST_WIDE_INT)
Definition emit-rtl.cc:2512
rtvec gen_rtvec(int,...)
Definition emit-rtl.cc:1064
rtx_insn * emit_copy_of_insn_after(rtx_insn *, rtx_insn *)
Definition emit-rtl.cc:6583
void clear_mem_offset(rtx)
Definition emit-rtl.cc:2240
Definition hard-reg-set.h:47
Definition memmodel.h:38
Definition emit-rtl.h:26
rtx_insn * PREV_INSN(const rtx_insn *insn)
Definition rtl.h:1464
rtx_insn * NEXT_INSN(const rtx_insn *insn)
Definition rtl.h:1475
Definition emit-rtl.h:529
virtual rtx get_reload_reg() const
Definition emit-rtl.h:531
rtx emit_autoinc(rtx value, poly_int64 amount)
Definition emit-rtl.cc:2590
Definition function.h:36
Definition function.h:94
Definition function.h:173
Definition emit-rtl.h:29
poly_int64 size
Definition emit-rtl.h:38
poly_int64 pops_args
Definition emit-rtl.h:33
int pretend_args_size
Definition emit-rtl.h:43
Definition emit-rtl.h:51
rtx arg_offset_rtx
Definition emit-rtl.h:47
rtx internal_arg_pointer
Definition emit-rtl.h:54
Definition function.cc:1262
Definition emit-rtl.h:59
bool uses_pic_offset_table
Definition emit-rtl.h:226
bool stack_realign_needed
Definition emit-rtl.h:250
struct initial_value_struct * hard_reg_initial_vals
Definition emit-rtl.h:96
bool tail_call_emit
Definition emit-rtl.h:232
bool frame_pointer_needed
Definition emit-rtl.h:240
bool saves_all_registers
Definition emit-rtl.h:199
bool is_leaf
Definition emit-rtl.h:297
bool has_nonlocal_goto
Definition emit-rtl.h:203
bool stack_realign_processed
Definition emit-rtl.h:264
bool calls_eh_return
Definition emit-rtl.h:195
rtx return_rtx
Definition emit-rtl.h:89
bool shrink_wrapped
Definition emit-rtl.h:279
int x_temp_slot_level
Definition emit-rtl.h:157
unsigned int stack_alignment_estimated
Definition emit-rtl.h:180
rtx_insn * x_function_beg_insn
Definition emit-rtl.h:145
rtx_insn * x_parm_birth_insn
Definition emit-rtl.h:148
unsigned int stack_alignment_needed
Definition emit-rtl.h:161
bool limit_stack
Definition emit-rtl.h:217
struct incoming_args args
Definition emit-rtl.h:65
bool uses_only_leaf_regs
Definition emit-rtl.h:302
HARD_REG_SET must_be_zero_on_return
Definition emit-rtl.h:320
rtx x_arg_pointer_save_area
Definition emit-rtl.h:134
bool shrink_wrapped_separate
Definition emit-rtl.h:283
bool nothrow
Definition emit-rtl.h:276
bool uses_eh_lsda
Definition emit-rtl.h:229
bool maybe_hot_insn_p
Definition emit-rtl.h:243
struct rtl_eh eh
Definition emit-rtl.h:67
bool accesses_prior_frames
Definition emit-rtl.h:192
void init_stack_alignment()
Definition emit-rtl.cc:6781
bool uses_const_pool
Definition emit-rtl.h:223
rtx drap_reg
Definition emit-rtl.h:137
poly_int64 outgoing_args_size
Definition emit-rtl.h:83
bool arg_pointer_save_area_init
Definition emit-rtl.h:235
unsigned short patch_area_size
Definition emit-rtl.h:183
struct varasm_status varasm
Definition emit-rtl.h:64
rtx_note * x_stack_check_probe_note
Definition emit-rtl.h:128
int max_insn_address
Definition emit-rtl.h:323
unsigned int parm_stack_boundary
Definition emit-rtl.h:168
rtx_code_label * x_return_label
Definition emit-rtl.h:113
bool stack_realign_tried
Definition emit-rtl.h:255
struct function_subsections subsections
Definition emit-rtl.h:66
poly_int64 x_frame_offset
Definition emit-rtl.h:142
HARD_REG_SET asm_clobbers
Definition emit-rtl.h:317
const predefined_function_abi * abi
Definition emit-rtl.h:75
bool sp_is_clobbered_by_asm
Definition emit-rtl.h:291
bool sp_is_unchanging
Definition emit-rtl.h:288
bool has_bb_partition
Definition emit-rtl.h:307
tree stack_protect_guard
Definition emit-rtl.h:100
bool all_throwers_are_sibcalls
Definition emit-rtl.h:213
class frame_space * frame_space_list
Definition emit-rtl.h:125
vec< temp_slot_p, va_gc > * x_used_temp_slots
Definition emit-rtl.h:151
rtl_ssa::function_info * ssa
Definition emit-rtl.h:77
unsigned short patch_area_entry
Definition emit-rtl.h:186
bool has_asm_statement
Definition emit-rtl.h:206
bool stack_realign_finalized
Definition emit-rtl.h:268
unsigned int max_used_stack_slot_alignment
Definition emit-rtl.h:171
vec< rtx, va_gc > * x_stack_slot_list
Definition emit-rtl.h:122
struct emit_status emit
Definition emit-rtl.h:63
bool need_drap
Definition emit-rtl.h:259
bool bb_reorder_complete
Definition emit-rtl.h:311
bool dbr_scheduled_p
Definition emit-rtl.h:271
bool profile
Definition emit-rtl.h:220
tree stack_protect_guard_decl
Definition emit-rtl.h:104
unsigned int preferred_stack_boundary
Definition emit-rtl.h:165
rtx_insn_list * x_nonlocal_goto_handler_labels
Definition emit-rtl.h:108
rtx_code_label * x_naked_return_label
Definition emit-rtl.h:118
class temp_slot * x_avail_temp_slots
Definition emit-rtl.h:154
Definition function.h:137
Definition rtl.h:735
Definition rtl.h:678
Definition rtl.h:311
Definition rtl.h:479
Definition rtl.h:545
Definition rtl.h:689
Definition function.h:29
struct sequence_stack * next
Definition function.h:33
rtx_insn * last
Definition function.h:32
rtx_insn * first
Definition function.h:31
Definition function.h:162
Definition vec.h:450
#define gcc_checking_assert(EXPR)
Definition system.h:828