Mercurial > hg > CbC > CbC_gcc
comparison gcc/emit-rtl.h @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 /* Exported functions from emit-rtl.c | 1 /* Exported functions from emit-rtl.c |
2 Copyright (C) 2004-2017 Free Software Foundation, Inc. | 2 Copyright (C) 2004-2018 Free Software Foundation, Inc. |
3 | 3 |
4 This file is part of GCC. | 4 This file is part of GCC. |
5 | 5 |
6 GCC is free software; you can redistribute it and/or modify it under | 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 | 7 the terms of the GNU General Public License as published by the Free |
26 /* Information mainlined about RTL representation of incoming arguments. */ | 26 /* Information mainlined about RTL representation of incoming arguments. */ |
27 struct GTY(()) incoming_args { | 27 struct GTY(()) incoming_args { |
28 /* Number of bytes of args popped by function being compiled on its return. | 28 /* Number of bytes of args popped by function being compiled on its return. |
29 Zero if no bytes are to be popped. | 29 Zero if no bytes are to be popped. |
30 May affect compilation of return insn or of function epilogue. */ | 30 May affect compilation of return insn or of function epilogue. */ |
31 int pops_args; | 31 poly_int64_pod pops_args; |
32 | 32 |
33 /* If function's args have a fixed size, this is that size, in bytes. | 33 /* If function's args have a fixed size, this is that size, in bytes. |
34 Otherwise, it is -1. | 34 Otherwise, it is -1. |
35 May affect compilation of return insn or of function epilogue. */ | 35 May affect compilation of return insn or of function epilogue. */ |
36 int size; | 36 poly_int64_pod size; |
37 | 37 |
38 /* # bytes the prologue should push and pretend that the caller pushed them. | 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 | 39 The prologue must do this, but only if parms can be passed in |
40 registers. */ | 40 registers. */ |
41 int pretend_args_size; | 41 int pretend_args_size; |
66 | 66 |
67 /* For function.c */ | 67 /* For function.c */ |
68 | 68 |
69 /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is | 69 /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is |
70 defined, the needed space is pushed by the prologue. */ | 70 defined, the needed space is pushed by the prologue. */ |
71 int outgoing_args_size; | 71 poly_int64_pod outgoing_args_size; |
72 | 72 |
73 /* If nonzero, an RTL expression for the location at which the current | 73 /* If nonzero, an RTL expression for the location at which the current |
74 function returns its result. If the current function returns its | 74 function returns its result. If the current function returns its |
75 result in a register, current_function_return_rtx will always be | 75 result in a register, current_function_return_rtx will always be |
76 the hard register containing the result. */ | 76 the hard register containing the result. */ |
77 rtx return_rtx; | 77 rtx return_rtx; |
78 /* If nonxero, an RTL expression for the lcoation at which the current | |
79 function returns bounds for its result. */ | |
80 rtx return_bnd; | |
81 | 78 |
82 /* Vector of initial-value pairs. Each pair consists of a pseudo | 79 /* Vector of initial-value pairs. Each pair consists of a pseudo |
83 register of approprite mode that stores the initial value a hard | 80 register of approprite mode that stores the initial value a hard |
84 register REGNO, and that hard register itself. */ | 81 register REGNO, and that hard register itself. */ |
85 /* ??? This could be a VEC but there is currently no way to define an | 82 /* ??? This could be a VEC but there is currently no way to define an |
124 rtx drap_reg; | 121 rtx drap_reg; |
125 | 122 |
126 /* Offset to end of allocated area of stack frame. | 123 /* Offset to end of allocated area of stack frame. |
127 If stack grows down, this is the address of the last stack slot allocated. | 124 If stack grows down, this is the address of the last stack slot allocated. |
128 If stack grows up, this is the address for the next slot. */ | 125 If stack grows up, this is the address for the next slot. */ |
129 HOST_WIDE_INT x_frame_offset; | 126 poly_int64_pod x_frame_offset; |
130 | 127 |
131 /* Insn after which register parms and SAVE_EXPRs are born, if nonopt. */ | 128 /* Insn after which register parms and SAVE_EXPRs are born, if nonopt. */ |
132 rtx_insn *x_parm_birth_insn; | 129 rtx_insn *x_parm_birth_insn; |
133 | 130 |
134 /* List of all used temporaries allocated, by level. */ | 131 /* List of all used temporaries allocated, by level. */ |
331 | 328 |
332 /* Set the expr for MEM to EXPR. */ | 329 /* Set the expr for MEM to EXPR. */ |
333 extern void set_mem_expr (rtx, tree); | 330 extern void set_mem_expr (rtx, tree); |
334 | 331 |
335 /* Set the offset for MEM to OFFSET. */ | 332 /* Set the offset for MEM to OFFSET. */ |
336 extern void set_mem_offset (rtx, HOST_WIDE_INT); | 333 extern void set_mem_offset (rtx, poly_int64); |
337 | 334 |
338 /* Clear the offset recorded for MEM. */ | 335 /* Clear the offset recorded for MEM. */ |
339 extern void clear_mem_offset (rtx); | 336 extern void clear_mem_offset (rtx); |
340 | 337 |
341 /* Set the size for MEM to SIZE. */ | 338 /* Set the size for MEM to SIZE. */ |
342 extern void set_mem_size (rtx, HOST_WIDE_INT); | 339 extern void set_mem_size (rtx, poly_int64); |
343 | 340 |
344 /* Clear the size recorded for MEM. */ | 341 /* Clear the size recorded for MEM. */ |
345 extern void clear_mem_size (rtx); | 342 extern void clear_mem_size (rtx); |
346 | 343 |
347 /* Set the attributes for MEM appropriate for a spill slot. */ | 344 /* Set the attributes for MEM appropriate for a spill slot. */ |
360 extern rtx gen_blockage (void); | 357 extern rtx gen_blockage (void); |
361 extern rtvec gen_rtvec (int, ...); | 358 extern rtvec gen_rtvec (int, ...); |
362 extern rtx copy_insn_1 (rtx); | 359 extern rtx copy_insn_1 (rtx); |
363 extern rtx copy_insn (rtx); | 360 extern rtx copy_insn (rtx); |
364 extern rtx_insn *copy_delay_slot_insn (rtx_insn *); | 361 extern rtx_insn *copy_delay_slot_insn (rtx_insn *); |
365 extern rtx gen_int_mode (HOST_WIDE_INT, machine_mode); | 362 extern rtx gen_int_mode (poly_int64, machine_mode); |
366 extern rtx_insn *emit_copy_of_insn_after (rtx_insn *, rtx_insn *); | 363 extern rtx_insn *emit_copy_of_insn_after (rtx_insn *, rtx_insn *); |
367 extern void set_reg_attrs_from_value (rtx, rtx); | 364 extern void set_reg_attrs_from_value (rtx, rtx); |
368 extern void set_reg_attrs_for_parm (rtx, rtx); | 365 extern void set_reg_attrs_for_parm (rtx, rtx); |
369 extern void set_reg_attrs_for_decl_rtl (tree t, rtx x); | 366 extern void set_reg_attrs_for_decl_rtl (tree t, rtx x); |
370 extern void adjust_reg_mode (rtx, machine_mode); | 367 extern void adjust_reg_mode (rtx, machine_mode); |
371 extern int mem_expr_equal_p (const_tree, const_tree); | 368 extern int mem_expr_equal_p (const_tree, const_tree); |
369 extern rtx gen_int_shift_amount (machine_mode, poly_int64); | |
372 | 370 |
373 extern bool need_atomic_barrier_p (enum memmodel, bool); | 371 extern bool need_atomic_barrier_p (enum memmodel, bool); |
374 | 372 |
375 /* Return the current sequence. */ | 373 /* Return the current sequence. */ |
376 | 374 |
436 get_max_uid (void) | 434 get_max_uid (void) |
437 { | 435 { |
438 return crtl->emit.x_cur_insn_uid; | 436 return crtl->emit.x_cur_insn_uid; |
439 } | 437 } |
440 | 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 | |
441 extern void set_decl_incoming_rtl (tree, rtx, bool); | 446 extern void set_decl_incoming_rtl (tree, rtx, bool); |
442 | 447 |
443 /* Return a memory reference like MEMREF, but with its mode changed | 448 /* Return a memory reference like MEMREF, but with its mode changed |
444 to MODE and its address changed to ADDR. | 449 to MODE and its address changed to ADDR. |
445 (VOIDmode means don't change the mode. | 450 (VOIDmode means don't change the mode. |
479 | 484 |
480 /* Likewise, but the reference is not required to be valid. */ | 485 /* Likewise, but the reference is not required to be valid. */ |
481 #define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \ | 486 #define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \ |
482 adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0) | 487 adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0) |
483 | 488 |
484 extern rtx adjust_address_1 (rtx, machine_mode, HOST_WIDE_INT, int, int, | 489 extern rtx adjust_address_1 (rtx, machine_mode, poly_int64, int, int, |
485 int, HOST_WIDE_INT); | 490 int, poly_int64); |
486 extern rtx adjust_automodify_address_1 (rtx, machine_mode, rtx, | 491 extern rtx adjust_automodify_address_1 (rtx, machine_mode, rtx, |
487 HOST_WIDE_INT, int); | 492 poly_int64, int); |
488 | 493 |
489 /* Return a memory reference like MEMREF, but whose address is changed by | 494 /* Return a memory reference like MEMREF, but whose address is changed by |
490 adding OFFSET, an RTX, to it. POW2 is the highest power of two factor | 495 adding OFFSET, an RTX, to it. POW2 is the highest power of two factor |
491 known to be in OFFSET (possibly 1). */ | 496 known to be in OFFSET (possibly 1). */ |
492 extern rtx offset_address (rtx, rtx, unsigned HOST_WIDE_INT); | 497 extern rtx offset_address (rtx, rtx, unsigned HOST_WIDE_INT); |
497 extern void set_mem_attributes (rtx, tree, int); | 502 extern void set_mem_attributes (rtx, tree, int); |
498 | 503 |
499 /* Similar, except that BITPOS has not yet been applied to REF, so if | 504 /* Similar, except that BITPOS has not yet been applied to REF, so if |
500 we alter MEM_OFFSET according to T then we should subtract BITPOS | 505 we alter MEM_OFFSET according to T then we should subtract BITPOS |
501 expecting that it'll be added back in later. */ | 506 expecting that it'll be added back in later. */ |
502 extern void set_mem_attributes_minus_bitpos (rtx, tree, int, HOST_WIDE_INT); | 507 extern void set_mem_attributes_minus_bitpos (rtx, tree, int, poly_int64); |
503 | 508 |
504 /* Return OFFSET if XEXP (MEM, 0) - OFFSET is known to be ALIGN | 509 /* Return OFFSET if XEXP (MEM, 0) - OFFSET is known to be ALIGN |
505 bits aligned for 0 <= OFFSET < ALIGN / BITS_PER_UNIT, or | 510 bits aligned for 0 <= OFFSET < ALIGN / BITS_PER_UNIT, or |
506 -1 if not known. */ | 511 -1 if not known. */ |
507 extern int get_mem_align_offset (rtx, unsigned int); | 512 extern int get_mem_align_offset (rtx, unsigned int); |
508 | 513 |
509 /* Return a memory reference like MEMREF, but with its mode widened to | 514 /* Return a memory reference like MEMREF, but with its mode widened to |
510 MODE and adjusted by OFFSET. */ | 515 MODE and adjusted by OFFSET. */ |
511 extern rtx widen_memory_access (rtx, machine_mode, HOST_WIDE_INT); | 516 extern rtx widen_memory_access (rtx, machine_mode, poly_int64); |
512 | 517 |
513 extern void maybe_set_max_label_num (rtx_code_label *x); | 518 extern void maybe_set_max_label_num (rtx_code_label *x); |
514 | 519 |
515 #endif /* GCC_EMIT_RTL_H */ | 520 #endif /* GCC_EMIT_RTL_H */ |