GCC Middle and Back End API Reference
emit-rtl.h
Go to the documentation of this file.
1/* Exported functions from emit-rtl.cc
2 Copyright (C) 2004-2024 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
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
9version.
10
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.
15
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/>. */
19
20#ifndef GCC_EMIT_RTL_H
21#define GCC_EMIT_RTL_H
22
23class temp_slot;
24typedef class temp_slot *temp_slot_p;
26namespace rtl_ssa { class function_info; }
27
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. */
34
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. */
39
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. */
44
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. */
48
49 /* Quantities of various kinds of registers
50 used for the current function's args. */
52
53 /* The arg pointer hard register, or the pseudo into which it was copied. */
55};
56
57
58/* Datastructures maintained for currently processed function in RTL form. */
59struct GTY(()) rtl_data {
60 void init_stack_alignment ();
61
64 struct varasm_status varasm;
65 struct incoming_args args;
66 struct function_subsections subsections;
67 struct rtl_eh eh;
68
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.
72
73 Other functions (including those called by this function) might use
74 different ABIs. */
76
77 rtl_ssa::function_info *GTY((skip)) ssa;
78
79 /* For function.cc */
80
81 /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is
82 defined, the needed space is pushed by the prologue. */
84
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. */
90
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. */
97
98 /* A variable living at the top of the frame that holds a known value.
99 Used for detecting stack clobbers. */
101
102 /* The __stack_chk_guard variable or expression holding the stack
103 protector canary value. */
105
106 /* List (chain of INSN_LIST) of labels heading the current handlers for
107 nonlocal gotos. */
109
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. */
114
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. */
119
120 /* List (chain of EXPR_LISTs) of all stack slots in this function.
121 Made for the sake of unshare_all_rtl. */
123
124 /* List of empty areas in the stack frame. */
126
127 /* Place after which to insert the tail_recursion_label if we need one. */
129
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. */
135
136 /* Dynamic Realign Argument Pointer used for realigning stack. */
138
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. */
143
144 /* The function's FUNCTION_BEG note. */
146
147 /* Insn after which register parms and SAVE_EXPRs are born, if nonopt. */
149
150 /* List of all used temporaries allocated, by level. */
152
153 /* List of available temp slots. */
155
156 /* Current nesting level for temporaries. */
158
159 /* The largest alignment needed on the stack, including requirement
160 for outgoing stack alignment. */
162
163 /* Preferred alignment of the end of stack frame, which is preferred
164 to call other functions. */
166
167 /* The minimum alignment of parameter stack. */
169
170 /* The largest alignment of slot allocated on the stack. */
172
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. */
181
182 /* How many NOP insns to place at each function entry by default. */
183 unsigned short patch_area_size;
184
185 /* How far the real asm entry point is into this area. */
186 unsigned short patch_area_entry;
187
188 /* For reorg. */
189
190 /* Nonzero if function being compiled called builtin_return_addr or
191 builtin_frame_address with nonzero count. */
193
194 /* Nonzero if the function calls __builtin_eh_return. */
196
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. */
200
201 /* Nonzero if function being compiled has nonlocal gotos to parent
202 function. */
204
205 /* Nonzero if function being compiled has an asm statement. */
207
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. */
214
215 /* Nonzero if stack limit checking should be enabled in the current
216 function. */
218
219 /* Nonzero if profiling code should be generated. */
221
222 /* Nonzero if the current function uses the constant pool. */
224
225 /* Nonzero if the current function uses pic_offset_table_rtx. */
227
228 /* Nonzero if the current function needs an lsda for exception handling. */
230
231 /* Set when the tail call has been produced. */
233
234 /* Nonzero if code to initialize arg_pointer_save_area has been emitted. */
236
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. */
241
242 /* When set, expand should optimize for speed. */
244
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. */
251
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. */
256
257 /* Nonzero if function being compiled needs dynamic realigned
258 argument pointer (drap) if stack needs realigning. */
260
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. */
265
266 /* Nonzero if function stack realignment has been finalized, namely
267 stack_realign_needed flag has been set and finalized after reload. */
269
270 /* True if dbr_schedule has already been called for this function. */
272
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. */
277
278 /* True if we performed shrink-wrapping for the current function. */
280
281 /* True if we performed shrink-wrapping for separate components for
282 the current function. */
284
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. */
289
290 /* True if the stack pointer is clobbered by asm statement. */
292
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. */
298
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. */
303
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. */
308
309 /* Nonzero if the function being compiled has completed the bb reordering
310 pass. */
312
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. */
318
319 /* All hard registers that need to be zeroed at the return of the routine. */
321
322 /* The highest address seen during shorten_branches. */
324};
325
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)
341
342extern GTY(()) struct rtl_data x_rtl;
343
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)
348
349/* Return whether two MEM_ATTRs are equal. */
350bool mem_attrs_eq_p (const class mem_attrs *, const class mem_attrs *);
351
352/* Set the alias set of MEM to SET. */
354
355/* Set the alignment of MEM to ALIGN bits. */
356extern void set_mem_align (rtx, unsigned int);
357
358/* Set the address space of MEM to ADDRSPACE. */
359extern void set_mem_addr_space (rtx, addr_space_t);
360
361/* Set the expr for MEM to EXPR. */
362extern void set_mem_expr (rtx, tree);
363
364/* Set the offset for MEM to OFFSET. */
365extern void set_mem_offset (rtx, poly_int64);
366
367/* Clear the offset recorded for MEM. */
368extern void clear_mem_offset (rtx);
369
370/* Set the size for MEM to SIZE. */
371extern void set_mem_size (rtx, poly_int64);
372
373/* Clear the size recorded for MEM. */
374extern void clear_mem_size (rtx);
375
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);
379
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);
385
386/* Likewise, but the reference is not required to be valid. */
387extern rtx replace_equiv_address_nv (rtx, rtx, bool = false);
388
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);
402
403extern bool need_atomic_barrier_p (enum memmodel, bool);
404
405/* Return the current sequence. */
406
407inline struct sequence_stack *
409{
410 return &crtl->emit.seq;
411}
412
413/* Return the outermost sequence. */
414
415inline struct sequence_stack *
417{
418 struct sequence_stack *seq, *top;
419
420 seq = get_current_sequence ();
421 do
422 {
423 top = seq;
424 seq = seq->next;
425 } while (seq);
426 return top;
427}
428
429/* Return the first insn of the current sequence or current function. */
430
431inline rtx_insn *
433{
434 return get_current_sequence ()->first;
435}
436
437/* Specify a new insn as the first in the chain. */
438
439inline void
441{
442 gcc_checking_assert (!insn || !PREV_INSN (insn));
443 get_current_sequence ()->first = insn;
444}
445
446/* Return the last insn emitted in current sequence or current function. */
447
448inline rtx_insn *
450{
451 return get_current_sequence ()->last;
452}
453
454/* Specify a new insn as the last in the chain. */
455
456inline void
458{
459 gcc_checking_assert (!insn || !NEXT_INSN (insn));
460 get_current_sequence ()->last = insn;
461}
462
463/* Return a number larger than any instruction's uid in this function. */
464
465inline int
467{
468 return crtl->emit.x_cur_insn_uid;
469}
470
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);
474
475extern rtx gen_const_vec_series (machine_mode, rtx, rtx);
476extern rtx gen_vec_series (machine_mode, rtx, rtx);
477
478extern void set_decl_incoming_rtl (tree, rtx, bool);
479
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);
485
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)
490
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)
494
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)
501
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)
506
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)
510
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)
516
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)
520
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);
525
526/* Class wrapping emit_autoinc which allows derived classes to control
527 how reload pseudos are created. */
529{
530 /* Can be overriden by derived classes. */
531 virtual rtx get_reload_reg () const { return gen_reg_rtx (Pmode); }
532
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.
536
537 AMOUNT is the number to increment or decrement by (always
538 positive and ignored for POST_MODIFY/PRE_MODIFY).
539
540 Return a pseudo containing the result. */
542};
543
544/* Return a memory reference like MEM, but with the address reloaded into a
545 pseudo register. */
546extern rtx force_reload_address (rtx mem);
547
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);
552
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);
557
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. */
562
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);
567
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);
571
573
574#endif /* GCC_EMIT_RTL_H */
Definition genmatch.cc:845
Definition function.h:188
Definition gcov.cc:270
Definition rtl.h:153
Definition function-abi.h:35
Definition function.cc:564
unsigned char addr_space_t
Definition coretypes.h:174
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:339
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:6765
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:6742
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:6582
void clear_mem_offset(rtx)
Definition emit-rtl.cc:2240
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
HARD_REG_ELT_TYPE HARD_REG_SET
Definition hard-reg-set.h:47
memmodel
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
CUMULATIVE_ARGS info
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:6780
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