]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/emit-rtl.h
C++: more location wrapper nodes (PR c++/43064, PR c++/43486)
[thirdparty/gcc.git] / gcc / emit-rtl.h
1 /* Exported functions from emit-rtl.c
2 Copyright (C) 2004-2018 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 #ifndef GCC_EMIT_RTL_H
21 #define GCC_EMIT_RTL_H
22
23 struct temp_slot;
24 typedef struct temp_slot *temp_slot_p;
25
26 /* Information mainlined about RTL representation of incoming arguments. */
27 struct GTY(()) incoming_args {
28 /* Number of bytes of args popped by function being compiled on its return.
29 Zero if no bytes are to be popped.
30 May affect compilation of return insn or of function epilogue. */
31 poly_int64_pod pops_args;
32
33 /* If function's args have a fixed size, this is that size, in bytes.
34 Otherwise, it is -1.
35 May affect compilation of return insn or of function epilogue. */
36 poly_int64_pod size;
37
38 /* # bytes the prologue should push and pretend that the caller pushed them.
39 The prologue must do this, but only if parms can be passed in
40 registers. */
41 int pretend_args_size;
42
43 /* This is the offset from the arg pointer to the place where the first
44 anonymous arg can be found, if there is one. */
45 rtx arg_offset_rtx;
46
47 /* Quantities of various kinds of registers
48 used for the current function's args. */
49 CUMULATIVE_ARGS info;
50
51 /* The arg pointer hard register, or the pseudo into which it was copied. */
52 rtx internal_arg_pointer;
53 };
54
55
56 /* Datastructures maintained for currently processed function in RTL form. */
57 struct GTY(()) rtl_data {
58 void init_stack_alignment ();
59
60 struct expr_status expr;
61 struct emit_status emit;
62 struct varasm_status varasm;
63 struct incoming_args args;
64 struct function_subsections subsections;
65 struct rtl_eh eh;
66
67 /* For function.c */
68
69 /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is
70 defined, the needed space is pushed by the prologue. */
71 poly_int64_pod outgoing_args_size;
72
73 /* If nonzero, an RTL expression for the location at which the current
74 function returns its result. If the current function returns its
75 result in a register, current_function_return_rtx will always be
76 the hard register containing the result. */
77 rtx return_rtx;
78
79 /* Vector of initial-value pairs. Each pair consists of a pseudo
80 register of approprite mode that stores the initial value a hard
81 register REGNO, and that hard register itself. */
82 /* ??? This could be a VEC but there is currently no way to define an
83 opaque VEC type. */
84 struct initial_value_struct *hard_reg_initial_vals;
85
86 /* A variable living at the top of the frame that holds a known value.
87 Used for detecting stack clobbers. */
88 tree stack_protect_guard;
89
90 /* List (chain of INSN_LIST) of labels heading the current handlers for
91 nonlocal gotos. */
92 rtx_insn_list *x_nonlocal_goto_handler_labels;
93
94 /* Label that will go on function epilogue.
95 Jumping to this label serves as a "return" instruction
96 on machines which require execution of the epilogue on all returns. */
97 rtx_code_label *x_return_label;
98
99 /* Label that will go on the end of function epilogue.
100 Jumping to this label serves as a "naked return" instruction
101 on machines which require execution of the epilogue on all returns. */
102 rtx_code_label *x_naked_return_label;
103
104 /* List (chain of EXPR_LISTs) of all stack slots in this function.
105 Made for the sake of unshare_all_rtl. */
106 vec<rtx, va_gc> *x_stack_slot_list;
107
108 /* List of empty areas in the stack frame. */
109 struct frame_space *frame_space_list;
110
111 /* Place after which to insert the tail_recursion_label if we need one. */
112 rtx_note *x_stack_check_probe_note;
113
114 /* Location at which to save the argument pointer if it will need to be
115 referenced. There are two cases where this is done: if nonlocal gotos
116 exist, or if vars stored at an offset from the argument pointer will be
117 needed by inner routines. */
118 rtx x_arg_pointer_save_area;
119
120 /* Dynamic Realign Argument Pointer used for realigning stack. */
121 rtx drap_reg;
122
123 /* Offset to end of allocated area of stack frame.
124 If stack grows down, this is the address of the last stack slot allocated.
125 If stack grows up, this is the address for the next slot. */
126 poly_int64_pod x_frame_offset;
127
128 /* Insn after which register parms and SAVE_EXPRs are born, if nonopt. */
129 rtx_insn *x_parm_birth_insn;
130
131 /* List of all used temporaries allocated, by level. */
132 vec<temp_slot_p, va_gc> *x_used_temp_slots;
133
134 /* List of available temp slots. */
135 struct temp_slot *x_avail_temp_slots;
136
137 /* Current nesting level for temporaries. */
138 int x_temp_slot_level;
139
140 /* The largest alignment needed on the stack, including requirement
141 for outgoing stack alignment. */
142 unsigned int stack_alignment_needed;
143
144 /* Preferred alignment of the end of stack frame, which is preferred
145 to call other functions. */
146 unsigned int preferred_stack_boundary;
147
148 /* The minimum alignment of parameter stack. */
149 unsigned int parm_stack_boundary;
150
151 /* The largest alignment of slot allocated on the stack. */
152 unsigned int max_used_stack_slot_alignment;
153
154 /* The stack alignment estimated before reload, with consideration of
155 following factors:
156 1. Alignment of local stack variables (max_used_stack_slot_alignment)
157 2. Alignment requirement to call other functions
158 (preferred_stack_boundary)
159 3. Alignment of non-local stack variables but might be spilled in
160 local stack. */
161 unsigned int stack_alignment_estimated;
162
163 /* For reorg. */
164
165 /* Nonzero if function being compiled called builtin_return_addr or
166 builtin_frame_address with nonzero count. */
167 bool accesses_prior_frames;
168
169 /* Nonzero if the function calls __builtin_eh_return. */
170 bool calls_eh_return;
171
172 /* Nonzero if function saves all registers, e.g. if it has a nonlocal
173 label that can reach the exit block via non-exceptional paths. */
174 bool saves_all_registers;
175
176 /* Nonzero if function being compiled has nonlocal gotos to parent
177 function. */
178 bool has_nonlocal_goto;
179
180 /* Nonzero if function being compiled has an asm statement. */
181 bool has_asm_statement;
182
183 /* This bit is used by the exception handling logic. It is set if all
184 calls (if any) are sibling calls. Such functions do not have to
185 have EH tables generated, as they cannot throw. A call to such a
186 function, however, should be treated as throwing if any of its callees
187 can throw. */
188 bool all_throwers_are_sibcalls;
189
190 /* Nonzero if stack limit checking should be enabled in the current
191 function. */
192 bool limit_stack;
193
194 /* Nonzero if profiling code should be generated. */
195 bool profile;
196
197 /* Nonzero if the current function uses the constant pool. */
198 bool uses_const_pool;
199
200 /* Nonzero if the current function uses pic_offset_table_rtx. */
201 bool uses_pic_offset_table;
202
203 /* Nonzero if the current function needs an lsda for exception handling. */
204 bool uses_eh_lsda;
205
206 /* Set when the tail call has been produced. */
207 bool tail_call_emit;
208
209 /* Nonzero if code to initialize arg_pointer_save_area has been emitted. */
210 bool arg_pointer_save_area_init;
211
212 /* Nonzero if current function must be given a frame pointer.
213 Set in reload1.c or lra-eliminations.c if anything is allocated
214 on the stack there. */
215 bool frame_pointer_needed;
216
217 /* When set, expand should optimize for speed. */
218 bool maybe_hot_insn_p;
219
220 /* Nonzero if function stack realignment is needed. This flag may be
221 set twice: before and after reload. It is set before reload wrt
222 stack alignment estimation before reload. It will be changed after
223 reload if by then criteria of stack realignment is different.
224 The value set after reload is the accurate one and is finalized. */
225 bool stack_realign_needed;
226
227 /* Nonzero if function stack realignment is tried. This flag is set
228 only once before reload. It affects register elimination. This
229 is used to generate DWARF debug info for stack variables. */
230 bool stack_realign_tried;
231
232 /* Nonzero if function being compiled needs dynamic realigned
233 argument pointer (drap) if stack needs realigning. */
234 bool need_drap;
235
236 /* Nonzero if function stack realignment estimation is done, namely
237 stack_realign_needed flag has been set before reload wrt estimated
238 stack alignment info. */
239 bool stack_realign_processed;
240
241 /* Nonzero if function stack realignment has been finalized, namely
242 stack_realign_needed flag has been set and finalized after reload. */
243 bool stack_realign_finalized;
244
245 /* True if dbr_schedule has already been called for this function. */
246 bool dbr_scheduled_p;
247
248 /* True if current function can not throw. Unlike
249 TREE_NOTHROW (current_function_decl) it is set even for overwritable
250 function where currently compiled version of it is nothrow. */
251 bool nothrow;
252
253 /* True if we performed shrink-wrapping for the current function. */
254 bool shrink_wrapped;
255
256 /* True if we performed shrink-wrapping for separate components for
257 the current function. */
258 bool shrink_wrapped_separate;
259
260 /* Nonzero if function being compiled doesn't modify the stack pointer
261 (ignoring the prologue and epilogue). This is only valid after
262 pass_stack_ptr_mod has run. */
263 bool sp_is_unchanging;
264
265 /* Nonzero if function being compiled doesn't contain any calls
266 (ignoring the prologue and epilogue). This is set prior to
267 register allocation in IRA and is valid for the remaining
268 compiler passes. */
269 bool is_leaf;
270
271 /* Nonzero if the function being compiled is a leaf function which only
272 uses leaf registers. This is valid after reload (specifically after
273 sched2) and is useful only if the port defines LEAF_REGISTERS. */
274 bool uses_only_leaf_regs;
275
276 /* Nonzero if the function being compiled has undergone hot/cold partitioning
277 (under flag_reorder_blocks_and_partition) and has at least one cold
278 block. */
279 bool has_bb_partition;
280
281 /* Nonzero if the function being compiled has completed the bb reordering
282 pass. */
283 bool bb_reorder_complete;
284
285 /* Like regs_ever_live, but 1 if a reg is set or clobbered from an
286 asm. Unlike regs_ever_live, elements of this array corresponding
287 to eliminable regs (like the frame pointer) are set if an asm
288 sets them. */
289 HARD_REG_SET asm_clobbers;
290
291 /* The highest address seen during shorten_branches. */
292 int max_insn_address;
293 };
294
295 #define return_label (crtl->x_return_label)
296 #define naked_return_label (crtl->x_naked_return_label)
297 #define stack_slot_list (crtl->x_stack_slot_list)
298 #define parm_birth_insn (crtl->x_parm_birth_insn)
299 #define frame_offset (crtl->x_frame_offset)
300 #define stack_check_probe_note (crtl->x_stack_check_probe_note)
301 #define arg_pointer_save_area (crtl->x_arg_pointer_save_area)
302 #define used_temp_slots (crtl->x_used_temp_slots)
303 #define avail_temp_slots (crtl->x_avail_temp_slots)
304 #define temp_slot_level (crtl->x_temp_slot_level)
305 #define nonlocal_goto_handler_labels (crtl->x_nonlocal_goto_handler_labels)
306 #define frame_pointer_needed (crtl->frame_pointer_needed)
307 #define stack_realign_fp (crtl->stack_realign_needed && !crtl->need_drap)
308 #define stack_realign_drap (crtl->stack_realign_needed && crtl->need_drap)
309
310 extern GTY(()) struct rtl_data x_rtl;
311
312 /* Accessor to RTL datastructures. We keep them statically allocated now since
313 we never keep multiple functions. For threaded compiler we might however
314 want to do differently. */
315 #define crtl (&x_rtl)
316
317 /* Return whether two MEM_ATTRs are equal. */
318 bool mem_attrs_eq_p (const struct mem_attrs *, const struct mem_attrs *);
319
320 /* Set the alias set of MEM to SET. */
321 extern void set_mem_alias_set (rtx, alias_set_type);
322
323 /* Set the alignment of MEM to ALIGN bits. */
324 extern void set_mem_align (rtx, unsigned int);
325
326 /* Set the address space of MEM to ADDRSPACE. */
327 extern void set_mem_addr_space (rtx, addr_space_t);
328
329 /* Set the expr for MEM to EXPR. */
330 extern void set_mem_expr (rtx, tree);
331
332 /* Set the offset for MEM to OFFSET. */
333 extern void set_mem_offset (rtx, poly_int64);
334
335 /* Clear the offset recorded for MEM. */
336 extern void clear_mem_offset (rtx);
337
338 /* Set the size for MEM to SIZE. */
339 extern void set_mem_size (rtx, poly_int64);
340
341 /* Clear the size recorded for MEM. */
342 extern void clear_mem_size (rtx);
343
344 /* Set the attributes for MEM appropriate for a spill slot. */
345 extern void set_mem_attrs_for_spill (rtx);
346 extern tree get_spill_slot_decl (bool);
347
348 /* Return a memory reference like MEMREF, but with its address changed to
349 ADDR. The caller is asserting that the actual piece of memory pointed
350 to is the same, just the form of the address is being changed, such as
351 by putting something into a register. */
352 extern rtx replace_equiv_address (rtx, rtx, bool = false);
353
354 /* Likewise, but the reference is not required to be valid. */
355 extern rtx replace_equiv_address_nv (rtx, rtx, bool = false);
356
357 extern rtx gen_blockage (void);
358 extern rtvec gen_rtvec (int, ...);
359 extern rtx copy_insn_1 (rtx);
360 extern rtx copy_insn (rtx);
361 extern rtx_insn *copy_delay_slot_insn (rtx_insn *);
362 extern rtx gen_int_mode (poly_int64, machine_mode);
363 extern rtx_insn *emit_copy_of_insn_after (rtx_insn *, rtx_insn *);
364 extern void set_reg_attrs_from_value (rtx, rtx);
365 extern void set_reg_attrs_for_parm (rtx, rtx);
366 extern void set_reg_attrs_for_decl_rtl (tree t, rtx x);
367 extern void adjust_reg_mode (rtx, machine_mode);
368 extern int mem_expr_equal_p (const_tree, const_tree);
369 extern rtx gen_int_shift_amount (machine_mode, poly_int64);
370
371 extern bool need_atomic_barrier_p (enum memmodel, bool);
372
373 /* Return the current sequence. */
374
375 static inline struct sequence_stack *
376 get_current_sequence (void)
377 {
378 return &crtl->emit.seq;
379 }
380
381 /* Return the outermost sequence. */
382
383 static inline struct sequence_stack *
384 get_topmost_sequence (void)
385 {
386 struct sequence_stack *seq, *top;
387
388 seq = get_current_sequence ();
389 do
390 {
391 top = seq;
392 seq = seq->next;
393 } while (seq);
394 return top;
395 }
396
397 /* Return the first insn of the current sequence or current function. */
398
399 static inline rtx_insn *
400 get_insns (void)
401 {
402 return get_current_sequence ()->first;
403 }
404
405 /* Specify a new insn as the first in the chain. */
406
407 static inline void
408 set_first_insn (rtx_insn *insn)
409 {
410 gcc_checking_assert (!insn || !PREV_INSN (insn));
411 get_current_sequence ()->first = insn;
412 }
413
414 /* Return the last insn emitted in current sequence or current function. */
415
416 static inline rtx_insn *
417 get_last_insn (void)
418 {
419 return get_current_sequence ()->last;
420 }
421
422 /* Specify a new insn as the last in the chain. */
423
424 static inline void
425 set_last_insn (rtx_insn *insn)
426 {
427 gcc_checking_assert (!insn || !NEXT_INSN (insn));
428 get_current_sequence ()->last = insn;
429 }
430
431 /* Return a number larger than any instruction's uid in this function. */
432
433 static inline int
434 get_max_uid (void)
435 {
436 return crtl->emit.x_cur_insn_uid;
437 }
438
439 extern bool valid_for_const_vector_p (machine_mode, rtx);
440 extern rtx gen_const_vec_duplicate (machine_mode, rtx);
441 extern rtx gen_vec_duplicate (machine_mode, rtx);
442
443 extern rtx gen_const_vec_series (machine_mode, rtx, rtx);
444 extern rtx gen_vec_series (machine_mode, rtx, rtx);
445
446 extern void set_decl_incoming_rtl (tree, rtx, bool);
447
448 /* Return a memory reference like MEMREF, but with its mode changed
449 to MODE and its address changed to ADDR.
450 (VOIDmode means don't change the mode.
451 NULL for ADDR means don't change the address.) */
452 extern rtx change_address (rtx, machine_mode, rtx);
453
454 /* Return a memory reference like MEMREF, but with its mode changed
455 to MODE and its address offset by OFFSET bytes. */
456 #define adjust_address(MEMREF, MODE, OFFSET) \
457 adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 0, 0)
458
459 /* Likewise, but the reference is not required to be valid. */
460 #define adjust_address_nv(MEMREF, MODE, OFFSET) \
461 adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 0, 0)
462
463 /* Return a memory reference like MEMREF, but with its mode changed
464 to MODE and its address offset by OFFSET bytes. Assume that it's
465 for a bitfield and conservatively drop the underlying object if we
466 cannot be sure to stay within its bounds. */
467 #define adjust_bitfield_address(MEMREF, MODE, OFFSET) \
468 adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, 0)
469
470 /* As for adjust_bitfield_address, but specify that the width of
471 BLKmode accesses is SIZE bytes. */
472 #define adjust_bitfield_address_size(MEMREF, MODE, OFFSET, SIZE) \
473 adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, SIZE)
474
475 /* Likewise, but the reference is not required to be valid. */
476 #define adjust_bitfield_address_nv(MEMREF, MODE, OFFSET) \
477 adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 1, 0)
478
479 /* Return a memory reference like MEMREF, but with its mode changed
480 to MODE and its address changed to ADDR, which is assumed to be
481 increased by OFFSET bytes from MEMREF. */
482 #define adjust_automodify_address(MEMREF, MODE, ADDR, OFFSET) \
483 adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 1)
484
485 /* Likewise, but the reference is not required to be valid. */
486 #define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \
487 adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0)
488
489 extern rtx adjust_address_1 (rtx, machine_mode, poly_int64, int, int,
490 int, poly_int64);
491 extern rtx adjust_automodify_address_1 (rtx, machine_mode, rtx,
492 poly_int64, int);
493
494 /* Return a memory reference like MEMREF, but whose address is changed by
495 adding OFFSET, an RTX, to it. POW2 is the highest power of two factor
496 known to be in OFFSET (possibly 1). */
497 extern rtx offset_address (rtx, rtx, unsigned HOST_WIDE_INT);
498
499 /* Given REF, a MEM, and T, either the type of X or the expression
500 corresponding to REF, set the memory attributes. OBJECTP is nonzero
501 if we are making a new object of this type. */
502 extern void set_mem_attributes (rtx, tree, int);
503
504 /* Similar, except that BITPOS has not yet been applied to REF, so if
505 we alter MEM_OFFSET according to T then we should subtract BITPOS
506 expecting that it'll be added back in later. */
507 extern void set_mem_attributes_minus_bitpos (rtx, tree, int, poly_int64);
508
509 /* Return OFFSET if XEXP (MEM, 0) - OFFSET is known to be ALIGN
510 bits aligned for 0 <= OFFSET < ALIGN / BITS_PER_UNIT, or
511 -1 if not known. */
512 extern int get_mem_align_offset (rtx, unsigned int);
513
514 /* Return a memory reference like MEMREF, but with its mode widened to
515 MODE and adjusted by OFFSET. */
516 extern rtx widen_memory_access (rtx, machine_mode, poly_int64);
517
518 extern void maybe_set_max_label_num (rtx_code_label *x);
519
520 #endif /* GCC_EMIT_RTL_H */