GCC Middle and Back End API Reference
|
Go to the source code of this file.
Data Structures | |
struct | addr_diff_vec_flags |
struct | mem_attrs |
struct | reg_attrs |
union | rtunion_def |
struct | block_symbol |
struct | object_block |
struct | rtvec_def |
struct | full_rtx_costs |
struct | address_info |
struct | replace_label_data |
struct | subreg_info |
struct | target_rtl |
struct | rtl_hooks |
Typedefs | |
typedef struct mem_attrs | mem_attrs |
typedef struct reg_attrs | reg_attrs |
typedef union rtunion_def | rtunion |
typedef struct replace_label_data | replace_label_data |
typedef int(* | rtx_function )(rtx *, void *) |
typedef int(* | for_each_inc_dec_fn )(rtx mem, rtx op, rtx dest, rtx src, rtx srcoff, void *arg) |
typedef int(* | rtx_equal_p_callback_function )(const_rtx *, const_rtx *, rtx *, rtx *) |
typedef int(* | hash_rtx_callback_function )(const_rtx, enum machine_mode, rtx *, enum machine_mode *) |
Enumerations | |
enum | rtx_code { NUM_RTX_CODE, LAST_AND_UNUSED_RTX_CODE } |
enum | rtx_class { RTX_COMPARE, RTX_COMM_COMPARE, RTX_BIN_ARITH, RTX_COMM_ARITH, RTX_UNARY, RTX_EXTRA, RTX_MATCH, RTX_INSN, RTX_OBJ, RTX_CONST_OBJ, RTX_TERNARY, RTX_BITFIELD_OPS, RTX_AUTOINC } |
enum | reg_note { REG_NOTE_MAX } |
enum | insn_note { NOTE_INSN_MAX, NOTE_INSN_MAX } |
enum | label_kind { LABEL_NORMAL = 0, LABEL_STATIC_ENTRY, LABEL_GLOBAL_ENTRY, LABEL_WEAK_ENTRY } |
enum | global_rtl_index { GR_STACK_POINTER, GR_FRAME_POINTER, GR_ARG_POINTER = GR_FRAME_POINTER, GR_HARD_FRAME_POINTER = GR_FRAME_POINTER, GR_HARD_FRAME_POINTER = GR_FRAME_POINTER, GR_ARG_POINTER = GR_FRAME_POINTER, GR_ARG_POINTER = GR_FRAME_POINTER, GR_VIRTUAL_INCOMING_ARGS, GR_VIRTUAL_STACK_ARGS, GR_VIRTUAL_STACK_DYNAMIC, GR_VIRTUAL_OUTGOING_ARGS, GR_VIRTUAL_CFA, GR_VIRTUAL_PREFERRED_STACK_BOUNDARY, GR_MAX } |
enum | libcall_type { LCT_NORMAL = 0, LCT_CONST = 1, LCT_PURE = 2, LCT_NORETURN = 3, LCT_THROW = 4, LCT_RETURNS_TWICE = 5 } |
Callback for for_each_inc_dec, to process the autoinc operation OP within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is NULL. The callback is passed the same opaque ARG passed to for_each_inc_dec. Return zero to continue looking for other autoinc operations, -1 to skip OP's operands, and any other value to interrupt the traversal and return that value to the caller of for_each_inc_dec.
Structure used to describe the attributes of a MEM. These are hashed so MEMs that the same attributes share a data structure. This means they cannot be modified in place.
Structure used to describe the attributes of a REG in similar way as mem_attrs does for MEM above. Note that the OFFSET field is calculated in the same way as for mem_attrs, rather than in the same way as a SUBREG_BYTE. For example, if a big-endian target stores a byte object in the low part of a 4-byte register, the OFFSET field will be -3 rather than 0.
typedef struct replace_label_data replace_label_data |
Structure used for passing data to REPLACE_LABEL.
typedef union rtunion_def rtunion |
typedef int(* rtx_function)(rtx *, void *) |
enum global_rtl_index |
Index labels for global_rtl.
enum insn_note |
Codes that appear in the NOTE_KIND field for kinds of notes that are not line numbers. These codes are all negative. Notice that we do not try to use zero here for any of the special note codes because sometimes the source line actually can be zero! This happens (for example) when we are generating code for the per-translation-unit constructor and destructor routines for some C++ translation unit.
enum label_kind |
enum libcall_type |
enum reg_note |
enum rtx_class |
enum rtx_code |
void _fatal_insn | ( | const char * | , |
const_rtx | , | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References debug_rtx(), error(), and fancy_abort().
Referenced by _fatal_insn_not_found().
void _fatal_insn_not_found | ( | const_rtx | , |
const char * | , | ||
int | , | ||
const char * | |||
) |
rtl-error.c
References _fatal_insn().
int active_insn_p | ( | const_rtx | ) |
void add_insn | ( | rtx | ) |
void add_insn_after | ( | rtx | , |
rtx | , | ||
basic_block | |||
) |
void add_insn_before | ( | rtx | , |
rtx | , | ||
basic_block | |||
) |
Referenced by add_auto_inc_notes(), add_label_notes(), add_reg_crossing_jump_notes(), add_test(), adjust_stack_1(), asan_clear_shadow(), attempt_change(), combine_predictions_for_insn(), compare_and_jump_seq(), copy_reg_eh_region_note_backward(), copy_reg_eh_region_note_forward(), delete_computation(), delete_prior_computation(), df_set_note(), distribute_notes(), doloop_modify(), emit_call_1(), emit_cmp_and_jump_insn_1(), emit_copy_of_insn_after(), emit_pop_insn(), emit_single_push_insn(), expand_builtin_longjmp(), expand_builtin_nonlocal_goto(), expand_builtin_trap(), expand_call(), find_reloads(), fixup_args_size_notes(), fixup_partition_crossing(), force_move_args_size_note(), force_nonfallthru_and_redirect(), link_cc0_insns(), make_reg_eh_region_note(), make_reg_eh_region_note_nothrow_nononlocal(), mark_jump_label_1(), mark_transaction_restart_calls(), maybe_move_args_size_note(), move_deaths(), move_for_stack_reg(), optimize_reg_copy_2(), patch_jump_insn(), peep2_attempt(), predict_insn(), process_bb_lives(), process_bb_node_lives(), reload_as_needed(), remove_notes(), remove_scratches(), sched_create_recovery_edges(), set_unique_reg_note(), try_auto_increment(), and try_split().
int address_cost | ( | rtx | , |
enum | machine_mode, | ||
addr_space_t | , | ||
bool | |||
) |
Referenced by add_reg_note(), distribute_notes(), eliminate_regs_1(), lra_eliminate_regs_1(), move_deaths(), recog_for_combine(), and try_combine().
int any_condjump_p | ( | const_rtx | ) |
int any_uncondjump_p | ( | const_rtx | ) |
int asm_noperands | ( | const_rtx | ) |
int asm_str_count | ( | const char * | templ | ) |
rtx assign_stack_local | ( | enum | machine_mode, |
HOST_WIDE_INT | , | ||
int | |||
) |
In function.c
rtx assign_stack_local_1 | ( | enum machine_mode | mode, |
HOST_WIDE_INT | size, | ||
int | align, | ||
int | kind | ||
) |
Allocate a stack slot of SIZE bytes and return a MEM rtx for it with machine mode MODE. ALIGN controls the amount of alignment for the address of the slot: 0 means according to MODE, -1 means use BIGGEST_ALIGNMENT and round size to multiple of that, -2 means use BITS_PER_UNIT, positive specifies alignment boundary in bits. KIND has ASLK_REDUCE_ALIGN bit set if it is OK to reduce alignment and ASLK_RECORD_PAD bit set if we should remember extra space we allocated for alignment purposes. When we are called from assign_stack_temp_for_type, it is not set so we don't track the same stack slot in two independent lists. We do not round to stack_boundary here.
References add_frame_space(), current_function_decl, frame_offset_overflow(), gen_rtx_MEM(), get_stack_local_alignment(), HOST_WIDE_INT, frame_space::length, frame_space::next, plus_constant(), set_mem_align(), frame_space::start, trunc_int_for_mode(), try_fit_stack_local(), and virtuals_instantiated.
Referenced by assign_stack_local(), assign_stack_temp_for_type(), and setup_save_areas().
rtx assign_stack_temp | ( | enum | machine_mode, |
HOST_WIDE_INT | |||
) |
rtx assign_stack_temp_for_type | ( | enum machine_mode | mode, |
HOST_WIDE_INT | size, | ||
tree | type | ||
) |
Allocate a temporary stack slot and record it for possible later reuse. MODE is the machine mode to be given to the returned rtx. SIZE is the size in units of the space required. We do no rounding here since assign_stack_local will do any required rounding. TYPE is the type that will be used for the stack slot.
References temp_slot::align, assign_stack_local_1(), temp_slot::base_offset, cut_slot_from_list(), temp_slot::full_size, gen_rtx_MEM(), get_alias_set(), get_stack_local_alignment(), HOST_WIDE_INT, temp_slot::in_use, insert_slot_to_list(), insert_temp_slot_address(), temp_slot::level, n_temp_slots_in_use, temp_slot::next, objects_must_conflict_p(), set_mem_alias_set(), set_mem_align(), temp_slot::size, temp_slot::slot, temp_slots_at_level(), type(), temp_slot::type, and virtuals_instantiated.
Referenced by assign_stack_temp(), assign_temp(), and expand_expr_real_1().
Assign a temporary. If TYPE_OR_DECL is a decl, then we are doing it on behalf of the decl and so that should be used in error messages. In either case, we allocate of the given type. MEMORY_REQUIRED is 1 if the result must be addressable stack memory; it is 0 if a register is OK. DONT_PROMOTE is 1 if we should not promote values in register to wider modes.
References assign_stack_temp_for_type(), error(), gen_reg_rtx(), HOST_WIDE_INT, int_size_in_bytes(), max_int_size_in_bytes(), promote_mode(), temp_slot::size, and type().
Referenced by emit_library_call_value_1(), emit_push_insn(), expand_asm_operands(), expand_builtin_cexpi(), expand_call(), expand_cond_expr_using_cmove(), expand_constructor(), expand_expr_real_1(), expand_expr_real_2(), expand_return(), initialize_argument_information(), and store_one_arg().
int auto_inc_p | ( | const_rtx | ) |
Referenced by add_auto_inc_notes().
Referenced by adjust_mems(), avoid_constant_pool_reference(), commutative_operand_precedence(), constant_pool_constant_p(), dw_loc_list_1(), equiv_constant(), find_constant_src(), forward_propagate_and_simplify(), loc_descriptor(), mem_loc_descriptor(), rtl_for_decl_location(), simplify_binary_operation(), simplify_binary_operation_1(), simplify_const_relational_operation(), simplify_relational_operation(), simplify_ternary_operation(), simplify_unary_operation(), subst(), and want_to_gcse_p().
int byte_lowpart_offset | ( | enum machine_mode | outer_mode, |
enum machine_mode | inner_mode | ||
) |
Return the number of bytes between the start of an OUTER_MODE in-memory value and the start of an INNER_MODE in-memory value, given that the former is a lowpart of the latter. It may be a paradoxical lowpart, in which case the offset will be negative on big-endian targets.
References subreg_lowpart_offset().
Referenced by adjust_reg_mode(), alter_subreg(), set_reg_attrs_for_decl_rtl(), set_reg_attrs_from_value(), track_loc_p(), var_lowpart(), and vt_add_function_parameter().
bool can_assign_to_reg_without_clobbers_p | ( | rtx | ) |
bool can_copy_p | ( | enum | machine_mode | ) |
In gcse.c
bool can_nonlocal_goto | ( | const_rtx | ) |
bool can_throw_external | ( | const_rtx | ) |
bool can_throw_internal | ( | const_rtx | ) |
int canon_anti_dependence | ( | const_rtx | mem, |
bool | mem_canonicalized, | ||
const_rtx | x, | ||
enum machine_mode | x_mode, | ||
rtx | x_addr | ||
) |
Likewise, but we already have a canonicalized MEM, and X_ADDR for X. Also, consider X in X_MODE (which might be from an enclosing STRICT_LOW_PART / ZERO_EXTRACT). If MEM_CANONICALIZED is true, MEM is canonicalized.
References write_dependence_p().
Referenced by check_dependence(), and cselib_invalidate_mem().
int canon_true_dependence | ( | const_rtx | mem, |
enum machine_mode | mem_mode, | ||
rtx | mem_addr, | ||
const_rtx | x, | ||
rtx | x_addr | ||
) |
Canonical true dependence: X is read after store in MEM takes place. Variant of true_dependence which assumes MEM has already been canonicalized (hence we no longer do that here). The mem_addr argument has been added, since true_dependence_1 computed this value prior to canonicalizing.
References true_dependence_1().
Referenced by check_mem_read_rtx(), compute_transp(), record_store(), scan_reads_nospill(), and vt_canon_true_dep().
rtx canonicalize_condition | ( | rtx | insn, |
rtx | cond, | ||
int | reverse, | ||
rtx * | earliest, | ||
rtx | want_reg, | ||
int | allow_cc_mode, | ||
int | valid_at_insn_p | ||
) |
Given an insn and condition, return a canonical description of the test being made.
Given an insn INSN and condition COND, return the condition in a canonical form to simplify testing by callers. Specifically: (1) The code will always be a comparison operation (EQ, NE, GT, etc.). (2) Both operands will be machine operands; (cc0) will have been replaced. (3) If an operand is a constant, it will be the second operand. (4) (LE x const) will be replaced with (LT x <const+1>) and similarly for GE, GEU, and LEU. If the condition cannot be understood, or is an inequality floating-point comparison which needs to be reversed, 0 will be returned. If REVERSE is nonzero, then reverse the condition prior to canonizing it. If EARLIEST is nonzero, it is a pointer to a place where the earliest insn used in locating the condition was found. If a replacement test of the condition is desired, it should be placed in front of that insn and we will be sure that the inputs are still valid. If WANT_REG is nonzero, we wish the condition to be relative to that register, if possible. Therefore, do not canonicalize the condition further. If ALLOW_CC_MODE is nonzero, allow the condition returned to be a compare to a CC mode register. If VALID_AT_INSN_P, the condition must be valid at both *EARLIEST and at INSN.
References cc0_rtx, const_val, gen_int_mode(), HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, modified_between_p(), modified_in_p(), prev_nonnote_insn(), prev_nonnote_nondebug_insn(), reg_set_p(), reversed_comparison_code(), RTX_COMM_COMPARE, RTX_COMPARE, rtx_equal_p(), SET, set_of(), swap_condition(), and val_signbit_known_set_p().
Referenced by get_condition(), noce_get_alt_condition(), and noce_get_condition().
bool check_for_inc_dec | ( | rtx | insn | ) |
In dse.c
enum machine_mode choose_hard_reg_mode | ( | unsigned int | regno, |
unsigned int | nregs, | ||
bool | call_saved | ||
) |
In reginfo.c
Return a machine mode that is legitimate for hard reg REGNO and large enough to save nregs. If we can't find one, return VOIDmode. If CALL_SAVED is true, only consider modes that are call saved.
Referenced by expand_builtin_init_dwarf_reg_sizes(), and init_reg_modes_target().
int commutative_operand_precedence | ( | rtx | ) |
Prepare a sequence comparing OP0 with OP1 using COMP and jumping to LABEL if true, with probability PROB. If CINSN is not NULL, it is the insn to copy in order to create a jump.
References add_reg_note(), copy_insn(), do_compare_rtx_and_jump(), emit_jump_insn(), end_sequence(), force_operand(), get_insns(), get_last_insn(), pc_set(), redirect_jump(), rtx_equal_p(), and start_sequence().
Referenced by unroll_loop_runtime_iterations(), and unswitch_loop().
int comparison_dominates_p | ( | enum | rtx_code, |
enum | rtx_code | ||
) |
In jump.c
unsigned int compute_alignments | ( | void | ) |
In final.c
Compute branch alignments based on frequency information in the CFG.
References bb_loop_depth(), CDI_DOMINATORS, cfun, dump_file, dump_flow_info(), dump_reg_info(), edge_def::flags, flow_loops_dump(), free(), free_dominance_info(), basic_block_def::frequency, get_first_label_num(), loop::header, basic_block_def::index, loop::inner, log(), basic_block_def::loop_father, loop_optimizer_finalize(), loop_optimizer_init(), max_label_num(), label_alignment::max_skip, loop::num, optimize_bb_for_size_p(), optimize_bb_for_speed_p(), optimize_function_for_size_p(), basic_block_def::preds, basic_block_def::prev_bb, and targetm.
int computed_jump_p | ( | const_rtx | ) |
int condjump_in_parallel_p | ( | const_rtx | ) |
int condjump_p | ( | const_rtx | ) |
bool constant_pool_constant_p | ( | rtx | ) |
Referenced by get_inv_cost().
rtx convert_memory_address_addr_space | ( | enum machine_mode | to_mode, |
rtx | x, | ||
addr_space_t | as | ||
) |
Given X, a memory address in address space AS' pointer mode, convert it to an address in the address space's address mode, or vice versa (TO_MODE says which way). We take advantage of the fact that pointers are not allowed to overflow by commuting arithmetic operations over conversions so that address arithmetic insns can be used.
References convert_memory_address_addr_space(), convert_modes(), simplify_unary_operation(), and targetm.
Referenced by convert_memory_address_addr_space(), expand_assignment(), expand_expr_addr_expr(), expand_expr_addr_expr_1(), make_tree(), and memory_address_addr_space().
|
inlinestatic |
Increase both members of the full_rtx_costs structure C by the cost of N insns.
References full_rtx_costs::size, and full_rtx_costs::speed.
Referenced by reload_cse_move2add().
|
inlinestatic |
Compare two full_rtx_costs structures A and B, returning true if A < B when optimizing for speed.
References full_rtx_costs::size, and full_rtx_costs::speed.
Referenced by move2add_use_add2_insn(), move2add_use_add3_insn(), and reload_cse_move2add().
location_t curr_insn_location | ( | void | ) |
Get current location.
References curr_location.
Referenced by emit_case_nodes(), expand_expr_real_1(), expand_gimple_basic_block(), expand_gimple_cond(), expand_thunk(), gimple_expand_cfg(), make_call_insn_raw(), make_debug_insn_raw(), make_insn_raw(), make_jump_insn_raw(), and store_expr().
int dead_or_set_regno_p | ( | const_rtx | , |
unsigned | int | ||
) |
Referenced by dead_or_set_p(), and distribute_notes().
void debug | ( | const rtx_def & | ref | ) |
void debug | ( | const rtx_def * | ptr | ) |
void debug_rtx | ( | const_rtx | ) |
void debug_rtx_list | ( | const_rtx | , |
int | |||
) |
void decide_function_section | ( | tree | ) |
Referenced by init_function_start().
const char* decode_asm_operands | ( | rtx | body, |
rtx * | operands, | ||
rtx ** | operand_locs, | ||
const char ** | constraints, | ||
enum machine_mode * | modes, | ||
location_t * | loc | ||
) |
Assuming BODY is an insn body that uses ASM_OPERANDS, copy its operands (both input and output) into the vector OPERANDS, the locations of the operands within the insn into the vector OPERAND_LOCS, and the constraints for the operands into CONSTRAINTS. Write the modes of the operands into MODES. Return the assembler-template. If MODES, OPERAND_LOCS, CONSTRAINTS or OPERANDS is 0, we don't store that info.
References SET.
Referenced by asm_insn_count(), check_asm_operands(), extract_insn(), final_scan_insn(), lra_set_insn_recog_data(), lra_update_insn_recog_data(), and maybe_fix_stack_asms().
void decompose_address | ( | struct address_info * | info, |
rtx * | loc, | ||
enum machine_mode | mode, | ||
addr_space_t | as, | ||
enum rtx_code | outer_code | ||
) |
Describe address *LOC in *INFO. MODE is the mode of the addressed value, or VOIDmode if not known. AS is the address space associated with LOC. OUTER_CODE is MEM if *LOC is a MEM address and ADDRESS otherwise.
References address_info::addr_outer_code, address_info::as, address_info::base_outer_code, decompose_automod_address(), decompose_incdec_address(), decompose_normal_address(), address_info::inner, memset(), address_info::mode, address_info::outer, and strip_address_mutations().
Referenced by decompose_lea_address(), decompose_mem_address(), and update_address().
void decompose_lea_address | ( | struct address_info * | , |
rtx * | |||
) |
Referenced by process_address().
void decompose_mem_address | ( | struct address_info * | , |
rtx | |||
) |
Referenced by process_address(), and uses_hard_regs_p().
void delete_dead_jumptables | ( | void | ) |
In cfgcleanup.c
Delete any jump tables never referenced. We can't delete them at the time of removing tablejump insn as they are referenced by the preceding insns computing the destination, so we delay deleting and garbagecollect them once life information is computed.
References delete_insn(), and dump_file.
Referenced by cfg_layout_finalize(), and cleanup_cfg().
void delete_insn | ( | rtx | ) |
void delete_insn_and_edges | ( | rtx | ) |
void delete_insns_since | ( | rtx | ) |
int delete_trivially_dead_insns | ( | rtx | , |
int | |||
) |
In cse.c
void dump_combine_stats | ( | FILE * | ) |
void dump_combine_total_stats | ( | FILE * | ) |
void dump_insn_slim | ( | FILE * | , |
const_rtx | |||
) |
Referenced by attempt_change(), check_and_process_move(), debug_insn_slim(), dump_inc_insn(), dump_mem_insn(), final_scan_insn(), inherit_reload_reg(), lra_constraints(), lra_process_new_insns(), merge_in_block(), print_rtl_with_bb(), remove_inheritance_pseudos(), rtl_dump_bb(), split_reg(), try_combine(), undo_optional_reloads(), and update_ebb_live_info().
Same as above, but stop at LAST or when COUNT == 0. If COUNT < 0 it will stop only at LAST or NULL rtx.
References pretty_printer::buffer, pp_flush(), print_insn_with_notes(), and output_buffer::stream.
Referenced by debug_rtl_slim(), inherit_reload_reg(), lra_process_new_insns(), and split_reg().
void dump_rtx_statistics | ( | void | ) |
References LAST_AND_UNUSED_RTX_CODE, rtvec_alloc_counts, rtvec_alloc_sizes, rtx_alloc_counts, and rtx_alloc_sizes.
Referenced by dump_memory_report().
void dump_value_slim | ( | FILE * | , |
const_rtx | , | ||
int | |||
) |
Functions in sched-vis.c. FIXME: Ideally these functions would not be in sched-vis.c but in rtl.c, because they are not only used by the scheduler anymore but for all "slim" RTL dumping.
Referenced by curr_insn_transform(), equiv_address_substitution(), get_reload_reg(), ira_update_equiv_info_by_shuffle_insn(), and process_addr_reg().
int eh_returnjump_p | ( | rtx | ) |
rtx emit_barrier | ( | void | ) |
Make an insn of code BARRIER and add it to the end of the doubly-linked list.
References add_insn().
Referenced by allocate_dynamic_stack_space(), do_tablejump(), duplicate_insn_chain(), emit(), emit_case_dispatch_table(), emit_indirect_jump(), emit_jump(), expand_builtin_return(), expand_builtin_trap(), expand_builtin_unreachable(), expand_divmod(), expand_doubleword_clz(), expand_doubleword_shift(), expand_expr_real_2(), expand_fix(), expand_float(), find_end_label(), store_expr(), and try_optimize_cfg().
rtx emit_insn_after_noloc | ( | rtx | , |
rtx | , | ||
basic_block | |||
) |
void emit_insn_at_entry | ( | rtx | ) |
rtx emit_insn_before_noloc | ( | rtx | , |
rtx | , | ||
basic_block | |||
) |
void emit_jump | ( | rtx | ) |
Referenced by allocate_dynamic_stack_space(), anti_adjust_stack_and_probe(), construct_init_block(), do_compare_rtx_and_jump(), do_jump(), do_jump_by_parts_equality_rtx(), do_jump_by_parts_greater_rtx(), do_jump_by_parts_zero_rtx(), emit_block_move_via_loop(), emit_case_decision_tree(), emit_case_nodes(), expand_builtin_eh_return(), expand_eh_return(), expand_gimple_basic_block(), expand_gimple_cond(), expand_goto(), expand_naked_return(), expand_null_return_1(), probe_stack_range(), and store_constructor().
void emit_library_call | ( | rtx | orgfun, |
enum libcall_type | fn_type, | ||
enum machine_mode | outmode, | ||
int | nargs, | ||
... | |||
) |
Output a library call to function FUN (a SYMBOL_REF rtx) (emitting the queue unless NO_QUEUE is nonzero), for a value of mode OUTMODE, with NARGS different arguments, passed as alternating rtx values and machine_modes to convert them to. FN_TYPE should be LCT_NORMAL for `normal' calls, LCT_CONST for `const' calls, LCT_PURE for `pure' calls, or other LCT_ value for other types of library calls.
References emit_library_call_value_1().
Referenced by expand_assignment(), expand_builtin_trap(), expand_main_function(), expand_mem_thread_fence(), probe_stack_range(), sjlj_emit_function_enter(), and sjlj_emit_function_exit().
rtx emit_library_call_value | ( | rtx | orgfun, |
rtx | value, | ||
enum libcall_type | fn_type, | ||
enum machine_mode | outmode, | ||
int | nargs, | ||
... | |||
) |
Like emit_library_call except that an extra argument, VALUE, comes second and says where to store the result. (If VALUE is zero, this function chooses a convenient way to return the value. This function returns an rtx for where the value is to be found. If VALUE is nonzero, VALUE is returned.
References emit_library_call_value_1().
Referenced by allocate_dynamic_stack_space(), convert_move(), expand_atomic_compare_and_swap(), expand_atomic_fetch_op(), expand_binop(), expand_builtin_memcmp(), expand_builtin_powi(), expand_fix(), expand_fixed_convert(), expand_float(), expand_twoval_binop_libfunc(), expand_unop(), maybe_emit_sync_lock_test_and_set(), prepare_cmp_insn(), prepare_float_lib_cmp(), and sjlj_emit_function_enter().
rtx emit_note | ( | enum | insn_note | ) |
void end_alias_analysis | ( | void | ) |
References reg_base_value, reg_known_equiv_p, reg_known_value, sbitmap_free(), and vec_free().
Referenced by cse_main(), dse_step7(), gcse_after_reload_main(), one_code_hoisting_pass(), one_pre_gcse_pass(), one_store_motion_pass(), reload_cse_regs_1(), sched_finish(), and update_equiv_regs().
void end_sequence | ( | void | ) |
After emitting to a sequence, restore previous saved state. To get the contents of the sequence just made, you must call `get_insns' *before* calling here. If the compiler might have deferred popping arguments while generating this sequence, and this sequence will not be immediately inserted into the instruction stream, use do_pending_stack_adjust before calling get_insns. That will ensure that the deferred pops are inserted into this sequence, and not into some random location in the instruction stream. See INHIBIT_DEFER_POP for more information about deferred popping of arguments.
References sequence_stack::first, free_sequence_stack, sequence_stack::last, memset(), sequence_stack::next, set_first_insn(), and set_last_insn().
Referenced by add_test(), asan_clear_shadow(), asan_emit_stack_protection(), assign_parm_setup_block(), assign_parm_setup_reg(), assign_parm_setup_stack(), assign_parms_unsplit_complex(), check_and_process_move(), combine_var_copies_in_loop_exit(), compare_and_jump_seq(), compensate_edge(), computation_cost(), cond_move_process_if_block(), convert_move(), copy_src_to_dest(), curr_insn_transform(), doloop_modify(), dup_block_and_redirect(), dw2_build_landing_pads(), emit_delay_sequence(), emit_inc_dec_insn_before(), emit_initial_value_sets(), emit_input_reload_insns(), emit_move_list(), emit_move_multi_word(), emit_output_reload_insns(), emit_partition_copy(), emit_use_return_register_into_block(), end_ifcvt_sequence(), expand_absneg_bit(), expand_atomic_fetch_op(), expand_binop(), expand_builtin_apply_args(), expand_builtin_int_roundingfn(), expand_builtin_int_roundingfn_2(), expand_builtin_mathfn(), expand_builtin_mathfn_2(), expand_builtin_mathfn_3(), expand_builtin_mathfn_ternary(), expand_builtin_return(), expand_builtin_saveregs(), expand_builtin_strlen(), expand_call(), expand_cond_expr_using_cmove(), expand_copysign_bit(), expand_ctz(), expand_doubleword_clz(), expand_dummy_function_end(), expand_expr_real_2(), expand_ffs(), expand_fix(), expand_fixed_convert(), expand_float(), expand_function_end(), expand_sdiv_pow2(), expand_twoval_binop_libfunc(), expand_unop(), expmed_mult_highpart_optab(), find_shift_sequence(), fix_crossing_unconditional_branches(), gen_clobber(), gen_cond_trap(), gen_move_insn(), gen_use(), generate_prolog_epilog(), get_address_cost(), get_arg_pointer_save_area(), gimple_expand_cfg(), gmalloc(), implicit_clobber_conflict_p(), inherit_in_ebb(), inherit_reload_reg(), init_set_costs(), initialize_uninitialized_regs(), insert_base_initialization(), insert_insn_on_edge(), insert_move_insn_before(), insert_value_copy_on_edge(), insert_var_expansion_initialization(), instantiate_virtual_regs_in_insn(), match_asm_constraints_1(), match_reload(), noce_emit_cmove(), noce_emit_move_insn(), noce_emit_store_flag(), noce_process_if_block(), noce_try_abs(), noce_try_addcc(), noce_try_cmove(), noce_try_cmove_arith(), noce_try_minmax(), noce_try_sign_mask(), noce_try_store_flag(), noce_try_store_flag_constants(), noce_try_store_flag_mask(), optimize_mode_switching(), pop_topmost_sequence(), prepare_float_lib_cmp(), process_addr_reg(), process_address(), process_insert_insn(), record_store(), replace_read(), resolve_shift_zext(), resolve_simple_move(), rtl_lv_add_condition_to_bb(), simplify_operand_subreg(), sjlj_emit_dispatch_table(), sjlj_emit_function_enter(), sjlj_emit_function_exit(), sjlj_mark_call_sites(), split_iv(), thread_prologue_and_epilogue_insns(), try_optimize_cfg(), and unroll_loop_runtime_iterations().
rtx entry_of_function | ( | void | ) |
Return RTX to emit after when we want to emit code on the entry of function.
References get_insns().
Referenced by expand_builtin_apply_args(), expand_builtin_saveregs(), and get_arg_pointer_save_area().
void expand_naked_return | ( | void | ) |
Generate RTL to return directly from the current function. (That is, we bypass any return value.)
References clear_pending_stack_adjust(), do_pending_stack_adjust(), emit_jump(), and gen_label_rtx().
Referenced by expand_builtin_return().
void expand_null_return | ( | void | ) |
In stmt.c
Generate RTL to return from the current function, with no value. (That is, we do not do anything about returning any value.)
References clobber_return_register(), and expand_null_return_1().
Referenced by expand_gimple_stmt_1(), and expand_return().
bool expensive_function_p | ( | int | ) |
unsigned int extended_count | ( | const_rtx | , |
enum | machine_mode, | ||
int | |||
) |
In combine.c
void find_all_hard_reg_sets | ( | const_rtx | , |
HARD_REG_SET * | |||
) |
Referenced by check_clobbered_conditions(), and recompute_todo_spec().
HOST_WIDE_INT find_args_size_adjust | ( | rtx | ) |
Referenced by insert_insn_end_basic_block(), and sjlj_mark_call_sites().
Referenced by adjust_insn(), allocate_dynamic_stack_space(), bypass_block(), can_replace_by(), combine_instructions(), compute_ld_motion_mems(), count_reg_usage(), cprop_insn(), cprop_jump(), cselib_record_sets(), find_constant_src(), gcse_emit_move_after(), get_biv_step_1(), hash_scan_set(), init_alias_analysis(), iv_analyze_def(), local_cprop_pass(), maybe_strip_eq_note_for_split_iv(), merge_notes(), move2add_note_store(), noce_get_alt_condition(), noce_try_abs(), purge_dead_edges(), remove_reachable_equiv_notes(), remove_reg_equal_equiv_notes_for_regno(), replace_single_def_regs(), replace_store_insn(), resolve_reg_notes(), split_insn(), store_killed_in_insn(), suitable_set_for_replacement(), and try_replace_reg().
Referenced by add_insn_allocno_copies(), add_reg_crossing_jump_notes(), adjust_insn(), any_uncondjump_p(), can_combine_p(), can_nonlocal_goto(), canonicalize_insn(), check_for_inc_dec(), check_for_inc_dec_1(), check_for_label_ref(), combine_predictions_for_insn(), compute_outgoing_frequencies(), cond_exec_process_if_block(), control_flow_insn_p(), convert_regs_1(), copy_reg_eh_region_note_backward(), copy_reg_eh_region_note_forward(), copy_src_to_dest(), create_trace_edges(), cse_insn(), cselib_process_insn(), curr_insn_transform(), dead_or_predicable(), delete_insn(), delete_scheduled_jump(), deps_analyze_insn(), distribute_notes(), do_local_cprop(), do_output_reload(), doloop_modify(), duplicate_computed_gotos(), emit_cmp_and_jump_insn_1(), emit_libcall_block_1(), expand_gimple_stmt(), expand_loc(), final_scan_insn(), find_dummy_reload(), find_equiv_reg(), find_if_case_1(), find_if_case_2(), find_last_value(), find_moveable_store(), find_reloads(), fix_up_crossing_landing_pad(), fixup_args_size_notes(), fixup_eh_region_note(), fixup_partition_crossing(), fixup_reorder_chain(), fixup_tail_calls(), follow_jumps(), force_move_args_size_note(), force_nonfallthru_and_redirect(), forward_propagate_and_simplify(), forward_propagate_into(), fp_setter_insn(), get_eh_region_and_lp_from_rtx(), hash_scan_set(), inherit_in_ebb(), init_alias_analysis(), init_eliminable_invariants(), insert_insn_end_basic_block(), insn_stack_adjust_offset_pre_post(), ira_update_equiv_info_by_shuffle_insn(), is_cfg_nonregular(), label_is_jump_target_p(), make_edges(), make_reg_eh_region_note_nothrow_nononlocal(), mark_insn_reg_store(), mark_jump_label_1(), mark_referenced_resources(), mark_set_resources(), match_reload(), maybe_move_args_size_note(), maybe_propagate_label_ref(), merge_if_block(), mostly_true_jump(), move_invariant_reg(), need_fake_edge_p(), next_cc0_user(), no_equiv(), noce_process_if_block(), noop_move_p(), notice_args_size(), old_insns_match_p(), optimize_reg_copy_2(), optimize_reg_copy_3(), outgoing_edges_match(), patch_jump_insn(), peep2_attempt(), prev_cc0_setter(), process_alt_operands(), process_bb_lives(), process_bb_node_lives(), purge_dead_edges(), record_reg_classes(), record_store(), redirect_jump_2(), redundant_insn(), reg_is_remote_constant_p(), reg_scan_mark_refs(), regmove_backward_pass(), regmove_forward_pass(), regstat_bb_compute_ri(), relax_delay_slots(), reload(), reload_as_needed(), rotate_loop(), rtl_verify_edges(), save_call_clobbered_regs(), scan_insn(), scan_one_insn(), scan_trace(), sched_analyze_insn(), set_unique_reg_note(), setup_reg_equiv(), setup_save_areas(), single_set_2(), steal_delay_list_from_target(), subst_reloads(), subst_stack_regs(), subst_stack_regs_pat(), tidy_fallthru_edges(), try_auto_increment(), try_back_substitute_reg(), try_combine(), try_eliminate_compare(), try_forward_edges(), try_head_merge_bb(), try_optimize_cfg(), try_split(), update_br_prob_note(), update_equiv_regs(), and validate_equiv_mem().
int find_regno_fusage | ( | const_rtx | , |
enum | rtx_code, | ||
unsigned | int | ||
) |
Referenced by dead_or_set_regno_p(), distribute_notes(), and find_reg_fusage().
Referenced by build_def_use(), calculate_loop_reg_pressure(), calculate_spill_cost(), combine_btr_defs(), compare_for_stack_reg(), dead_or_set_regno_p(), dead_pseudo_p(), delete_dead_insn(), delete_output_reload(), delete_prior_computation(), distribute_notes(), emit_output_reload_insns(), emit_reload_insns(), emit_swap_insn(), fixup_match_2(), lra_delete_dead_insn(), match_reload(), move_for_stack_reg(), optimize_reg_copy_1(), process_address(), process_alt_operands(), record_reg_classes(), reg_dead_at_p(), remove_death(), setup_insn_reg_uses(), subst_stack_regs_pat(), try_eliminate_compare(), try_merge(), and update_reg_unused_notes().
void finish_subregs_of_mode | ( | void | ) |
Referenced by finish_costs().
void fix_register | ( | const char * | , |
int | , | ||
int | |||
) |
int for_each_inc_dec | ( | rtx * | x, |
for_each_inc_dec_fn | fn, | ||
void * | arg | ||
) |
Traverse *X looking for MEMs, and for autoinc operations within them. For each such autoinc operation found, call FN, passing it the innermost enclosing MEM, the operation itself, the RTX modified by the operation, two RTXs (the second may be NULL) that, once added, represent the value to be held by the modified RTX afterwards, and ARG. FN is to return -1 to skip looking for other autoinc operations within the visited operation, 0 to continue the traversal, or any other value to have it returned to the caller of for_each_inc_dec.
References for_each_inc_dec_ops::arg, for_each_inc_dec_ops::fn, for_each_inc_dec_find_mem(), for_each_rtx(), and for_each_inc_dec_ops::mem.
Referenced by check_for_inc_dec(), check_for_inc_dec_1(), and cselib_record_sets().
int for_each_rtx | ( | rtx * | , |
rtx_function | , | ||
void * | |||
) |
Referenced by add_used_regs(), add_uses(), add_uses_1(), adjust_mems(), approx_reg_cost(), btr_referenced_p(), can_move_insns_across(), check_mem_read_use(), combine_stack_adjustments_for_block(), compute_reloc_for_rtx(), const_ok_for_output(), const_rtx_hash(), copyprop_hardreg_forward_1(), count_occurrences_equiv(), cprop_find_used_regs(), cse_change_cc_mode_insn(), cse_extended_basic_block(), decompose_multiword_subregs(), delete_trivially_dead_insns(), eh_returnjump_p(), eliminate_regs_1(), extract_mentioned_regs(), find_decomposable_subregs(), for_each_inc_dec(), for_each_inc_dec_find_mem(), insn_contains_asm(), insns_may_alias_p(), instantiate_decl_rtl(), instantiate_virtual_regs(), instantiate_virtual_regs_in_insn(), internal_arg_pointer_based_exp(), invalidate(), mark_constant(), mark_constants(), mark_mem_use_1(), mark_symbol_refs_as_used(), outgoing_edges_match(), output_operand(), propagate_rtx(), record_hard_reg_uses(), record_truncated_values(), refs_newer_value_p(), replace_in_expr(), replace_label(), resolve_debug(), resolve_one_addr(), resolve_reg_notes(), resolve_simple_move(), returnjump_p(), rtx_referenced_p(), simplify_using_condition(), simplify_using_initial_values(), subst_all_stack_regs_in_debug_insn(), thread_jump(), try_crossjump_to_edge(), try_split(), unmentioned_reg_p(), update_equiv_regs(), use_narrower_mode_test(), use_type(), and walk_mems_1().
In varasm.c
Referenced by compress_float_constant(), cse_insn(), curr_insn_transform(), emit_move_insn(), emit_move_multi_word(), emit_push_insn(), expand_expr_real_1(), find_reloads(), find_reloads_address_part(), find_reloads_toplev(), init_eliminable_invariants(), move_block_to_reg(), plus_constant(), reg_to_stack(), replace_label(), setup_reg_equiv(), and simplify_operand_subreg().
void free_EXPR_LIST_list | ( | rtx * | ) |
lists.c
void free_EXPR_LIST_node | ( | rtx | ) |
void free_INSN_LIST_list | ( | rtx * | ) |
void free_INSN_LIST_node | ( | rtx | ) |
void free_reg_info | ( | void | ) |
Free up register info memory.
Free up the space allocated by allocate_reg_info.
References free(), and reg_renumber.
Referenced by move_loop_invariants(), one_code_hoisting_pass(), regmove_optimize(), and rest_of_handle_final().
int function_invariant_p | ( | const_rtx | ) |
In reload1.c
rtx gen_hard_reg_clobber | ( | enum | machine_mode, |
unsigned | int | ||
) |
rtx gen_label_rtx | ( | void | ) |
Return a newly created CODE_LABEL rtx with a unique label number.
Referenced by allocate_dynamic_stack_space(), anti_adjust_stack_and_probe(), asan_clear_shadow(), block_label(), do_compare_rtx_and_jump(), do_jump(), do_jump_1(), do_jump_by_parts_equality_rtx(), do_jump_by_parts_greater_rtx(), do_jump_by_parts_zero_rtx(), dw2_build_landing_pads(), emit_block_move_via_loop(), emit_case_dispatch_table(), emit_store_flag_force(), expand_abs(), expand_builtin_eh_return(), expand_compare_and_swap_loop(), expand_copysign_absneg(), expand_divmod(), expand_doubleword_clz(), expand_doubleword_shift(), expand_eh_return(), expand_errno_check(), expand_expr_real_1(), expand_expr_real_2(), expand_ffs(), expand_fix(), expand_float(), expand_function_start(), expand_naked_return(), expand_sdiv_pow2(), expand_sjlj_dispatch_table(), expand_smod_pow2(), find_end_label(), fix_crossing_conditional_branches(), fix_up_crossing_landing_pad(), get_label_before(), get_uncond_jump_length(), label_rtx(), label_rtx_for_bb(), probe_stack_range(), sched_create_recovery_block(), sjlj_build_landing_pads(), sjlj_emit_dispatch_table(), stack_protect_epilogue(), store_constructor(), and store_expr().
In cse.c
Referenced by gen_lowpart_for_debug().
rtx gen_raw_REG | ( | enum | machine_mode, |
int | |||
) |
rtx gen_reg_rtx | ( | enum | machine_mode | ) |
rtx gen_rtx_CONST_INT | ( | enum | machine_mode, |
HOST_WIDE_INT | |||
) |
There are some RTL codes that require special attention; the generation functions included above do the raw handling. If you add to this list, modify special_rtx in gengenrtl.c as well.
rtx gen_rtx_REG | ( | enum | machine_mode, |
unsigned | |||
) |
Generate a register with same attributes as REG, but with OFFSET added to the REG_OFFSET.
References gen_rtx_REG(), and update_reg_offset().
Referenced by alter_subreg(), expand_debug_parm_decl(), simplify_subreg(), var_lowpart(), and vt_add_function_parameter().
enum machine_mode get_address_mode | ( | rtx | mem | ) |
Referenced by add_stores(), add_uses(), adjust_address_1(), canon_address(), check_mem_read_rtx(), cselib_record_sets(), cst_pool_loc_descr(), debug_mem_addr_value(), dw_loc_list_1(), dwarf2out_frame_debug_cfa_expression(), emit_block_move_via_loop(), expand_assignment(), expand_expr_real_1(), find_reloads(), find_split_point(), gen_subprogram_die(), loc_descriptor(), loc_list_from_tree(), maybe_legitimize_operand_same_code(), mem_loc_descriptor(), move_by_pieces(), noce_try_cmove_arith(), offset_address(), record_store(), replace_expr_with_values(), rtl_for_decl_location(), sched_analyze_1(), sched_analyze_2(), store_by_pieces(), store_by_pieces_1(), store_constructor(), store_expr(), and use_type().
Referenced by call_may_noreturn_p(), dwarf2out_var_location(), emit_call_1(), old_insns_match_p(), prepare_call_arguments(), and scan_insn().
Given a JUMP_INSN, return a canonical description of the test being made.
Referenced by bb_estimate_probability_locally(), check_simple_exit(), fis_get_condition(), may_unswitch_on(), simplify_using_initial_values(), and try_head_merge_bb().
int get_first_label_num | ( | void | ) |
Return first label number used in this function (if any were used).
References first_label_num.
Referenced by compute_alignments(), init_eliminable_invariants(), and reload_combine().
rtx get_first_nonnote_insn | ( | void | ) |
Return the first nonnote insn emitted in current sequence or current function. This routine looks inside SEQUENCEs.
References get_insns(), and next_insn().
void get_full_rtx_cost | ( | rtx | x, |
enum rtx_code | outer, | ||
int | opno, | ||
struct full_rtx_costs * | c | ||
) |
Fill in the structure C with information about both speed and size rtx costs for X, which is operand OPNO in an expression with code OUTER.
References rtx_cost(), full_rtx_costs::size, and full_rtx_costs::speed.
Referenced by get_full_set_rtx_cost(), and get_full_set_src_cost().
|
inlinestatic |
Like set_rtx_cost, but return both the speed and size costs in C.
References get_full_rtx_cost().
Referenced by move2add_use_add2_insn(), move2add_use_add3_insn(), and reload_cse_move2add().
|
inlinestatic |
Like set_src_cost, but return both the speed and size costs in C.
References get_full_rtx_cost(), and SET.
Referenced by reload_cse_move2add().
enum rtx_code get_index_code | ( | const struct address_info * | ) |
Referenced by base_plus_disp_to_reg(), and process_address().
HOST_WIDE_INT get_index_scale | ( | const struct address_info * | ) |
Referenced by equiv_address_substitution().
const char* get_insn_name | ( | int | ) |
HOST_WIDE_INT get_integer_term | ( | const_rtx | ) |
Referenced by use_related_value().
rtx get_last_insn_anywhere | ( | void | ) |
Emission of insns (adding them to the doubly-linked list).
Return the last insn emitted, even if it is in a sequence now pushed.
References get_last_insn(), sequence_stack::last, sequence_stack::next, and stack.
rtx get_last_nonnote_insn | ( | void | ) |
Return the last nonnote insn emitted in current sequence or current function. This routine looks inside SEQUENCEs.
References get_last_insn(), and previous_insn().
int get_max_insn_count | ( | void | ) |
Return the number of actual (non-debug) insns emitted in this function.
Referenced by alloc_hash_table().
|
staticread |
Return the attributes of a MEM rtx.
Referenced by adjust_address_1(), change_address(), clear_mem_offset(), clear_mem_size(), offset_address(), set_mem_addr_space(), set_mem_alias_set(), set_mem_align(), set_mem_attrs_for_spill(), set_mem_expr(), set_mem_offset(), set_mem_size(), and widen_memory_access().
void get_mode_bounds | ( | enum machine_mode | mode, |
int | sign, | ||
enum machine_mode | target_mode, | ||
rtx * | mmin, | ||
rtx * | mmax | ||
) |
In stor-layout.c.
Gets minimal and maximal values for MODE (signed or unsigned depending on SIGN). The returned constants are made to be usable in TARGET_MODE.
References gen_int_mode(), HOST_BITS_PER_WIDE_INT, and HOST_WIDE_INT.
Referenced by determine_max_iter(), iv_number_of_iterations(), shorten_into_mode(), and simplify_const_relational_operation().
Referenced by avoid_constant_pool_reference(), mark_jump_label_1(), noce_try_abs(), plus_constant(), replace_label(), and rtx_referenced_p_1().
Referenced by const_ok_for_output_1(), and dbxout_symbol_location().
enum machine_mode get_pool_mode | ( | const_rtx | ) |
Referenced by avoid_constant_pool_reference(), offset_within_block_p(), and replace_label().
rtx get_reg_base_value | ( | unsigned | int | ) |
bool get_reg_known_equiv_p | ( | unsigned | int | ) |
rtx get_reg_known_value | ( | unsigned | int | ) |
Referenced by insert_with_costs(), and use_related_value().
void globalize_reg | ( | tree | , |
int | |||
) |
|
read |
RTL expression ("rtx").
unsigned hash_rtx | ( | const_rtx | x, |
enum machine_mode | mode, | ||
int * | do_not_record_p, | ||
int * | hash_arg_in_memory_p, | ||
bool | have_reg_qty | ||
) |
Hash an rtx. We are careful to make sure the value is never negative. Equivalent registers hash identically. MODE is used in hashing for CONST_INTs only; otherwise the mode of X is used. Store 1 in DO_NOT_RECORD_P if any subexpression is volatile. If HASH_ARG_IN_MEMORY_P is not NULL, store 1 in it if X contains a MEM rtx which does not have the MEM_READONLY_P flag set. Note that cse_insn knows that the hash code of a MEM expression is just (int) MEM plus the hash code of the address.
References hash_rtx_cb().
Referenced by canon_hash(), st_expr_hasher::hash(), pre_ldst_expr_hasher::hash(), invariant_group_base_hasher::hash(), hash_expr(), hash_invariant_expr_1(), ldst_entry(), safe_hash(), st_expr_entry(), and temp_slot_address_compute_hash().
unsigned hash_rtx_cb | ( | const_rtx | x, |
enum machine_mode | mode, | ||
int * | do_not_record_p, | ||
int * | hash_arg_in_memory_p, | ||
bool | have_reg_qty, | ||
hash_rtx_callback_function | cb | ||
) |
Same as hash_rtx, but call CB on each rtx if it is not NULL. When the callback returns true, we continue with the new rtx.
References fixed_hash(), global_regs, hash_rtx_cb(), hash_rtx_string(), real_hash(), reload_completed, and targetm.
Referenced by hash_rtx(), and hash_rtx_cb().
rtx immed_double_const | ( | HOST_WIDE_INT | , |
HOST_WIDE_INT | , | ||
enum | machine_mode | ||
) |
rtx immed_double_int_const | ( | double_int | , |
enum | machine_mode | ||
) |
Referenced by can_delete_label_p().
int in_sequence_p | ( | void | ) |
Return 1 if currently emitting into a sequence.
Referenced by expand_dummy_function_end(), expand_function_end(), and resolve_simple_move().
int inequality_comparisons_p | ( | const_rtx | ) |
Referenced by inequality_comparisons_p(), and next_insn_tests_no_inequality().
void init_alias_analysis | ( | void | ) |
Initialize the aliasing machinery. Initialize the REG_KNOWN_VALUE array.
References bitmap_clear(), changed, copying_arguments, find_reg_equal_equiv_note(), find_reg_note(), free(), get_reg_known_value(), max_reg_num(), memcpy(), memset(), note_stores(), old_reg_base_value, plus_constant(), pre_and_rev_post_order_compute(), prologue_epilogue_contains(), record_set(), reg_known_equiv_p, reg_known_value, reg_overlap_mentioned_p(), reg_seen, regno_reg_rtx, reload_completed, rtx_equal_p(), rtx_varies_p(), sbitmap_alloc(), sbitmap_free(), SET, set_reg_known_equiv_p(), set_reg_known_value(), timevar_pop(), timevar_push(), ui, and vec_safe_grow_cleared().
Referenced by cse_main(), dse_step0(), gcse_after_reload_main(), one_code_hoisting_pass(), one_pre_gcse_pass(), one_store_motion_pass(), reload_cse_regs_1(), sched_init(), and update_equiv_regs().
void init_alias_target | ( | void | ) |
References arg_base_value, memset(), and unique_base_value().
Referenced by backend_init_target().
|
inlinestatic |
Initialize a full_rtx_costs structure C to the maximum cost.
References full_rtx_costs::size, and full_rtx_costs::speed.
Referenced by move2add_use_add3_insn().
|
inlinestatic |
Initialize a full_rtx_costs structure C to zero cost.
References full_rtx_costs::size, and full_rtx_costs::speed.
Referenced by move2add_use_add3_insn().
void init_emit | ( | void | ) |
Initialize data structures and variables in this file before generating rtl for each function.
References first_label_num, init_virtual_regs(), label_num, memcpy(), regno_reg_rtx, set_first_insn(), and set_last_insn().
Referenced by prepare_function_start().
void init_emit_once | ( | void | ) |
Create some permanent unique rtl objects shared between all functions.
References byte_mode, const_double_htab_eq(), const_double_htab_hash(), CONST_FIXED_FROM_FIXED_VALUE, const_fixed_htab_eq(), const_fixed_htab_hash(), const_int_htab_eq(), const_int_htab_hash(), const_int_rtx, const_tiny_rtx, dconst1, dconst2, double_mode, FCONST0, FCONST1, gen_const_vector(), gen_rtx_CONST_INT(), HOST_WIDE_INT, mem_attrs_htab_eq(), mem_attrs_htab_hash(), mode_for_size(), ptr_mode, reg_attrs_htab_eq(), reg_attrs_htab_hash(), and word_mode.
Referenced by backend_init().
void init_emit_regs | ( | void | ) |
Initialise global register information required by all functions.
References mem_attrs::addrspace, mem_attrs::align, gen_raw_REG(), init_reg_modes_target(), mem_attrs::size, and mem_attrs::size_known_p.
Referenced by backend_init_target().
void init_expmed | ( | void | ) |
In expmed.c
References alg_hash_entry_ptr(), alg_hash_used_p(), init_expmed_rtl::cint, default_rtl_profile(), HOST_WIDE_INT, init_expmed_one_mode(), memset(), init_expmed_rtl::mult, init_expmed_rtl::neg, init_expmed_rtl::plus, init_expmed_rtl::pow2, init_expmed_rtl::reg, init_expmed_rtl::sdiv, init_expmed_rtl::sdiv_32, set_alg_hash_used_p(), set_src_cost(), set_zero_cost(), init_expmed_rtl::shift, init_expmed_rtl::shift_add, init_expmed_rtl::shift_mult, init_expmed_rtl::shift_sub0, init_expmed_rtl::shift_sub1, init_expmed_rtl::smod_32, init_expmed_rtl::trunc, init_expmed_rtl::udiv, init_expmed_rtl::wide_lshr, init_expmed_rtl::wide_mult, init_expmed_rtl::wide_trunc, and init_expmed_rtl::zext.
Referenced by backend_init_target().
void init_fake_stack_mems | ( | void | ) |
Initialize some fake stack-frame MEM references for use in memory_move_secondary_cost.
References gen_rtx_MEM().
Referenced by backend_init_target().
void init_lower_subreg | ( | void | ) |
In lower-subreg.c
Do one-per-target initialisation. This involves determining which operations on the machine are profitable. If none are found, then the pass just returns when called.
References compute_costs(), gen_rtx_REG(), memset(), cost_rtxes::set, cost_rtxes::shift, cost_rtxes::source, cost_rtxes::target, this_target_lower_subreg, word_mode, and cost_rtxes::zext.
Referenced by backend_init_target().
void init_reg_modes_target | ( | void | ) |
Compute the table of register modes. These values are used to record death information for individual registers (as opposed to a multi-register mode). This function might be invoked more than once, if the target has support for changing register usage conventions on a per-function basis.
References choose_hard_reg_mode(), and word_mode.
Referenced by init_emit_regs().
void init_reg_sets | ( | void | ) |
Function called only once per target_globals to initialize the target_hard_regs structure. Once this is done, various switches may override.
References initial_call_really_used_regs, initial_call_used_regs, initial_fixed_regs, int_reg_class_contents, and memcpy().
Referenced by general_init(), and save_target_globals().
void init_regs | ( | void | ) |
Finish initializing the register sets and initialize the register modes. This function might be invoked more than once, if the target has support for changing register usage conventions on a per-function basis.
References init_reg_sets_1().
Referenced by backend_init_target(), and reinit_regs().
void init_rtlanal | ( | void | ) |
Initialize non_rtx_starting_operands, which is used to speed up for_each_rtx.
References first, init_num_sign_bit_copies_in_rep(), non_rtx_starting_operands, and NUM_RTX_CODE.
Referenced by backend_init().
void init_subregs_of_mode | ( | void | ) |
References bitmap_obstack_initialize(), bitmap_obstack_release(), and find_subregs_of_mode().
Referenced by init_costs().
void init_varasm_once | ( | void | ) |
In varasm.c
References const_desc_eq(), const_desc_hash(), const_desc_htab, create_constant_pool(), emit_bss(), emit_common(), emit_local(), emit_tls_common(), get_noswitch_section(), get_unnamed_section(), new_alias_set(), object_block_entry_eq(), object_block_entry_hash(), object_block_htab, output_section_asm_op(), pointer_set_create(), section_entry_eq(), section_entry_hash(), section_htab, shared_constant_pool, targetm, and text_section.
Referenced by backend_init().
bool insn_could_throw_p | ( | const_rtx | ) |
const char* insn_file | ( | const_rtx | ) |
int insn_line | ( | const_rtx | ) |
In emit-rtl.c
void insn_locations_finalize | ( | void | ) |
At the end of emit stage, clear current location.
References curr_location.
Referenced by expand_thunk(), and gimple_expand_cfg().
void insn_locations_init | ( | void | ) |
Allocate insn location datastructure.
Referenced by expand_thunk(), and gimple_expand_cfg().
bool insn_nothrow_p | ( | const_rtx | ) |
int insn_rtx_cost | ( | rtx | , |
bool | |||
) |
bool invalid_mode_change_p | ( | unsigned int | regno, |
enum reg_class | rclass | ||
) |
Return 1 if REGNO has had an invalid mode change in CLASS from FROM mode.
References bitmap_bit_p().
Referenced by find_costs_and_classes(), print_allocno_costs(), and print_pseudo_costs().
void invert_br_probabilities | ( | rtx | ) |
In predict.c
hashval_t iterative_hash_rtx | ( | const_rtx | , |
hashval_t | |||
) |
bool jump_to_label_p | ( | rtx | ) |
bool keep_with_call_p | ( | const_rtx | ) |
Referenced by keep_with_call_p(), rtl_block_ends_with_call_p(), and rtl_flow_call_edges_add().
Referenced by cfg_layout_redirect_edge_and_branch(), check_for_label_ref(), find_reloads(), subst_reloads(), and try_optimize_cfg().
rtx last_call_insn | ( | void | ) |
Return the last CALL_INSN in the current list, or 0 if there is none. This routine does not look inside SEQUENCEs.
References get_last_insn().
Referenced by emit_call_1(), and expand_builtin_apply().
Referenced by df_remove_dead_eq_notes(), loc_mentioned_in_p(), and remove_address_replacements().
Referenced by cst_pool_loc_descr(), expand_debug_expr(), and resolve_one_addr().
int low_bitmask_len | ( | enum | machine_mode, |
unsigned | HOST_WIDE_INT | ||
) |
Referenced by try_widen_shift_mode().
In loop-iv.c
Generates a subreg to get the least significant part of EXPR (in mode INNER_MODE) to OUTER_MODE.
References simplify_gen_subreg(), and subreg_lowpart_offset().
Referenced by cselib_lookup_1(), dead_debug_insert_temp(), doloop_optimize(), get_iv_value(), get_reload_reg(), iv_number_of_iterations(), iv_subreg(), lowpart_subreg_maybe_copy(), prepare_call_arguments(), record_jump_cond_subreg(), replace_dead_reg(), simplify_relational_operation_1(), try_apply_stack_adjustment(), try_combine(), and use_narrower_mode().
void mark_elimination | ( | int | , |
int | |||
) |
void mark_reg_pointer | ( | rtx | , |
int | |||
) |
void mark_user_reg | ( | rtx | ) |
int max_label_num | ( | void | ) |
Return 1 + the largest label number used so far in the current function.
References label_num.
Referenced by compute_alignments(), grow_label_align(), init_eliminable_invariants(), reload_combine(), shorten_branches(), and update_alignments().
int max_reg_num | ( | void | ) |
In emit-rtl.c.
Return 1 plus largest pseudo reg number used in the current function.
Referenced by allocate_reg_info(), assign_by_spills(), build_conflicts(), build_single_def_use_links(), build_store_vectors(), choose_best_pseudo_reg(), cleanup_cfg(), combine_split_insns(), compute_hash_table_work(), compute_store_table(), create_live_range_start_chains(), create_log_links(), cse_main(), cselib_init(), curr_insn_transform(), dead_or_predicable(), decompose_multiword_subregs(), df_grow_reg_info(), df_print_word_regset(), dump_reg_info(), execute_jump(), expand_reg_info(), find_costs_and_classes(), find_moveable_pseudos(), fix_reg_equiv_init(), fwprop_done(), fwprop_init(), grow_reg_equivs(), if_convert(), implicit_clobber_conflict_p(), init_alias_analysis(), init_costs(), init_deps(), init_live_reload_and_inheritance_pseudos(), init_lives(), init_loop_tree_node(), init_reg_info(), init_regno_assign_info(), initiate_allocnos(), initiate_regno_cost_classes(), ira(), ira_emit(), ira_expand_reg_equiv(), ira_flattening(), ira_print_disposition(), ira_set_pseudo_classes(), ira_sort_regnos_for_alter_reg(), is_too_expensive(), lra(), lra_assign(), lra_clear_live_ranges(), lra_coalesce(), lra_constraints(), lra_create_live_ranges(), lra_eliminate(), lra_emit_add(), lra_emit_move(), lra_final_code_change(), lra_need_for_spills_p(), lra_spill(), lra_update_reg_val_offset(), maybe_memory_address_addr_space_p(), print_live_ranges(), print_pseudo_costs(), propagate_allocno_info(), rebuild_regno_allocno_maps(), reg_is_remote_constant_p(), regmove_optimize(), regno_clobbered_at_setjmp(), regstat_compute_calls_crossed(), regstat_compute_ri(), regstat_init_n_sets_and_refs(), remove_some_program_points_and_update_live_ranges(), remove_unnecessary_allocnos(), resize_reg_info(), rest_of_handle_auto_inc_dec(), rest_of_handle_combine(), rest_of_handle_cse(), rest_of_handle_cse2(), rest_of_handle_cse_after_global_opts(), rest_of_handle_sms(), sched_analyze_reg(), sched_init(), setup_live_pseudos_and_spill_after_risky_transforms(), setup_min_max_allocno_live_range_point(), setup_preferred_alternate_classes_for_new_pseudos(), setup_reg_classes(), setup_reg_equiv_init(), spill_pseudos(), try_combine(), and web_main().
bool may_be_sp_based_p | ( | rtx | ) |
int may_trap_or_fault_p | ( | const_rtx | ) |
int may_trap_p | ( | const_rtx | ) |
Referenced by can_move_insns_across(), check_cond_move_block(), distribute_notes(), eliminate_partially_redundant_loads(), emit_libcall_block_1(), find_moveable_store(), insn_could_throw_p(), may_trap_exp(), noce_operand_ok(), prepare_cmp_insn(), prune_expressions(), purge_dead_edges(), sched_analyze_insn(), and simple_mem().
int may_trap_p_1 | ( | const_rtx | , |
unsigned | |||
) |
Referenced by default_unspec_may_trap_p(), may_trap_or_fault_p(), may_trap_p(), and may_trap_p_1().
void maybe_set_first_label_num | ( | rtx | ) |
bool mode_signbit_p | ( | enum | machine_mode, |
const_rtx | |||
) |
Referenced by simplify_binary_operation_1(), simplify_shift_const_1(), and simplify_unary_operation_1().
Referenced by canonicalize_condition(), clobbers_queued_reg_save(), cond_exec_process_if_block(), cond_exec_process_insns(), cprop_jump(), cse_cc_succs(), fill_slots_from_thread(), find_moveable_pseudos(), fp_setter_insn(), modified_in_p(), no_conflict_move_test(), noce_can_store_speculate_p(), noce_get_alt_condition(), noce_try_cmove_arith(), and sched_insns_conditions_mutex_p().
rtx move_by_pieces | ( | rtx | to, |
rtx | from, | ||
unsigned HOST_WIDE_INT | len, | ||
unsigned int | align, | ||
int | endp | ||
) |
In expr.c
Generate several move instructions to copy LEN bytes from block FROM to block TO. (These are MEM rtx's with BLKmode). If PUSH_ROUNDING is defined and TO is NULL, emit_single_push_insn is used to push FROM to the stack. ALIGN is maximum stack alignment we can assume. If ENDP is 0 return to, if ENDP is 1 return memory at the end ala mempcpy, and if ENDP is 2 return memory the end minus one byte ala stpcpy.
References alignment_for_piecewise_move(), move_by_pieces_d::autinc_from, move_by_pieces_d::autinc_to, copy_to_mode_reg(), emit_insn(), move_by_pieces_d::explicit_inc_from, move_by_pieces_d::explicit_inc_to, move_by_pieces_d::from, move_by_pieces_d::from_addr, gen_add2_insn(), get_address_mode(), move_by_pieces_d::len, len, move_by_pieces_1(), move_by_pieces_ninsns(), move_by_pieces_d::offset, optab_handler(), plus_constant(), move_by_pieces_d::reverse, move_by_pieces_d::to, move_by_pieces_d::to_addr, and widest_int_mode_for_size().
Referenced by emit_block_move_hints(), emit_push_insn(), and expand_builtin_mempcpy_args().
int multiple_sets | ( | const_rtx | ) |
Referenced by fill_simple_delay_slots(), and relax_delay_slots().
bool nonzero_address_p | ( | const_rtx | ) |
Referenced by nonzero_address_p(), and simplify_const_relational_operation().
unsigned HOST_WIDE_INT nonzero_bits | ( | const_rtx | , |
enum | machine_mode | ||
) |
Referenced by combine_simplify_rtx(), expand_compound_operation(), extended_count(), find_split_point(), force_to_mode(), if_then_else_cond(), make_compound_operation(), make_extraction(), make_field_assignment(), num_sign_bit_copies1(), record_value_for_reg(), set_nonzero_bits_and_sign_copies(), simplify_and_const_int_1(), simplify_binary_operation_1(), simplify_compare_const(), simplify_comparison(), simplify_const_relational_operation(), simplify_if_then_else(), simplify_relational_operation_1(), simplify_set(), simplify_shift_const_1(), simplify_unary_operation_1(), try_combine(), and try_widen_shift_mode().
int noop_move_p | ( | const_rtx | ) |
Referenced by delete_noop_moves(), delete_unmarked_insns(), and distribute_notes().
Call FUN on each register or MEM that is stored into or clobbered by X. (X would be the pattern of an insn). DATA is an arbitrary pointer, ignored by note_stores, but passed to FUN. FUN receives three arguments: 1. the REG, MEM, CC0 or PC being stored in or clobbered, 2. the SET or CLOBBER rtx that does the store, 3. the pointer DATA provided to note_stores. If the item being stored in or clobbered is a SUBREG of a hard register, the SUBREG will be passed.
References note_stores(), and SET.
Referenced by add_with_sets(), adjust_insn(), assign_parm_setup_reg(), build_def_use(), calculate_loop_reg_pressure(), can_move_insns_across(), combine_instructions(), compute_defs_uses_and_gen(), compute_hash_table_work(), copyprop_hardreg_forward_1(), cselib_record_sets(), delete_trivially_dead_insns(), emit_inc_dec_insn_before(), emit_libcall_block_1(), emit_output_reload_insns(), expand_atomic_compare_and_swap(), find_all_hard_reg_sets(), find_first_parameter_load(), init_alias_analysis(), init_insn_reg_pressure_info(), insert_one_insn(), likely_spilled_retval_p(), load_killed_in_block_p(), mark_nonreg_stores(), mark_target_live_regs(), mem_write_insn_p(), memory_modified_in_insn_p(), note_stores(), notice_stack_pointer_modification(), optimize_mode_switching(), record_dead_and_set_regs(), record_last_mem_set_info(), record_opr_changes(), reg_dead_at_p(), reload(), reload_as_needed(), reload_combine(), reload_cse_move2add(), replace_read(), save_call_clobbered_regs(), set_of(), sets_likely_spilled(), setup_save_areas(), simplify_using_initial_values(), thread_prologue_and_epilogue_insns(), try_combine(), update_equiv_regs(), and validate_equiv_mem().
Like notes_stores, but call FUN for each expression that is being referenced in PBODY, a pointer to the PATTERN of an insn. We only call FUN for each expression, not any interior subexpressions. FUN receives a pointer to the expression and the DATA passed to this function. Note that this is not quite the same test as that done in reg_referenced_p since that considers something as being referenced if it is being partially set, while we do not.
References note_uses(), and SET.
Referenced by add_dependence(), add_with_sets(), adjust_insn(), bypass_block(), combine_instructions(), copyprop_hardreg_forward_1(), cprop_insn(), insert_one_insn(), local_cprop_pass(), mem_read_insn_p(), note_uses(), scan_insn(), thread_prologue_and_epilogue_insns(), and validate_replace_src_group().
unsigned int num_sign_bit_copies | ( | const_rtx | , |
enum | machine_mode | ||
) |
Referenced by combine_simplify_rtx(), extended_count(), force_to_mode(), if_then_else_cond(), nonzero_bits1(), record_value_for_reg(), set_nonzero_bits_and_sign_copies(), simplify_compare_const(), simplify_comparison(), simplify_const_relational_operation(), simplify_if_then_else(), simplify_set(), simplify_shift_const_1(), simplify_unary_operation_1(), truncated_to_mode(), and try_widen_shift_mode().
bool offset_within_block_p | ( | const_rtx | , |
HOST_WIDE_INT | |||
) |
int only_sets_cc0_p | ( | const_rtx | ) |
int onlyjump_p | ( | const_rtx | ) |
bool optimize_insn_for_size_p | ( | void | ) |
Return TRUE when BB should be optimized for size.
References cfun, and optimize_function_for_size_p().
Referenced by expand_builtin_mathfn(), expand_builtin_mathfn_2(), expand_switch_as_decision_tree_p(), and optimize_insn_for_speed_p().
bool optimize_insn_for_speed_p | ( | void | ) |
Return TRUE when BB should be optimized for speed.
References optimize_insn_for_size_p().
Referenced by avoid_expensive_constant(), choose_mult_variant(), compress_float_constant(), do_jump(), emit_case_dispatch_table(), emit_store_flag(), expand_abs_nojump(), expand_binop(), expand_divmod(), expand_gimple_cond(), expand_mult(), expand_one_cmpl_abs_nojump(), expand_sdiv_pow2(), expand_shift_1(), expand_smod_pow2(), expand_widening_mult(), expmed_mult_highpart(), expmed_mult_highpart_optab(), fold_builtin_strcat(), gimple_expand_builtin_pow(), lshift_cheap_p(), precompute_register_parameters(), prefer_and_bit_test(), prepare_cmp_insn(), and synth_mult().
Referenced by decode_addr_const(), expand_expr_constant(), make_decl_rtl(), output_addressed_constants(), and string_cst_pool_decl().
bool paradoxical_subreg_p | ( | const_rtx | ) |
rtx plus_constant | ( | enum | machine_mode, |
rtx | , | ||
HOST_WIDE_INT | |||
) |
void pop_topmost_sequence | ( | void | ) |
After emitting to the outer-level insn chain, update the outer-level insn chain, and restore the previous saved state.
References end_sequence(), sequence_stack::first, get_insns(), get_last_insn(), sequence_stack::last, sequence_stack::next, and stack.
Referenced by expand_builtin_apply_args(), expand_builtin_saveregs(), and get_arg_pointer_save_area().
void print_inline_rtx | ( | FILE * | , |
const_rtx | , | ||
int | |||
) |
void print_insn | ( | pretty_printer * | , |
const_rtx | , | ||
int | |||
) |
Referenced by print_insn_with_notes().
void print_mem_expr | ( | FILE * | , |
const_tree | |||
) |
void print_pattern | ( | pretty_printer * | , |
const_rtx | , | ||
int | |||
) |
Referenced by print_exp(), print_insn(), print_insn_with_notes(), print_pattern(), and str_pattern_slim().
void print_rtl | ( | FILE * | , |
const_rtx | |||
) |
int print_rtl_single | ( | FILE * | , |
const_rtx | |||
) |
int print_rtl_single_with_indent | ( | FILE * | , |
const_rtx | , | ||
int | |||
) |
void print_rtl_with_bb | ( | FILE * | , |
const_rtx | , | ||
int | |||
) |
In cfgrtl.c
void print_simple_rtl | ( | FILE * | , |
const_rtx | |||
) |
void print_value | ( | pretty_printer * | , |
const_rtx | , | ||
int | |||
) |
Referenced by dump_value_slim(), print_exp(), print_pattern(), and print_value().
int prologue_epilogue_contains | ( | const_rtx | ) |
void push_to_sequence | ( | rtx | ) |
void push_topmost_sequence | ( | void | ) |
Set up the outer-level insn chain as the current sequence, saving the previously current one.
References sequence_stack::first, sequence_stack::last, sequence_stack::next, set_first_insn(), set_last_insn(), stack, and start_sequence().
Referenced by expand_builtin_apply_args(), expand_builtin_saveregs(), and get_arg_pointer_save_area().
bool read_rtx | ( | const char * | , |
rtx * | |||
) |
In read-rtl.c
void rebuild_jump_labels | ( | rtx | ) |
void rebuild_jump_labels_chain | ( | rtx | ) |
Referenced by assign_parm_setup_reg(), find_all_hard_reg_sets(), and thread_prologue_and_epilogue_insns().
void record_hard_reg_uses | ( | rtx * | , |
void * | |||
) |
Referenced by add_dependence(), and thread_prologue_and_epilogue_insns().
Fix up JUMP_LABEL and label ref counts after OLABEL has been replaced with NLABEL in JUMP. If DELETE_UNUSED is positive, delete related insn to OLABEL if its ref count has dropped to zero.
References confirm_change_group(), delete_related_insns(), find_reg_note(), invert_br_probabilities(), invert_exp_1(), redirect_exp_1(), and remove_note().
Referenced by dead_or_predicable(), invert_jump(), and redirect_jump().
Return nonzero if register in range [REGNO, ENDREGNO) appears either explicitly or implicitly in X other than being stored into. References contained within the substructure at LOC do not count. LOC may be zero, meaning don't ignore anything.
References refers_to_regno_p(), SET, subreg_nregs(), and subreg_regno().
Referenced by compute_defs_uses_and_gen(), delete_output_reload(), df_get_call_refs(), distribute_notes(), link_btr_uses(), refers_to_regno_p(), reg_overlap_mentioned_p(), remove_invalid_refs(), remove_invalid_subreg_refs(), and sched_analyze_insn().
enum reg_class reg_allocno_class | ( | int | ) |
enum reg_class reg_alternate_class | ( | int | ) |
int reg_class_subset_p | ( | reg_class_t | , |
reg_class_t | |||
) |
int reg_classes_intersect_p | ( | reg_class_t | , |
reg_class_t | |||
) |
In reginfo.c
Referenced by assign_parm_setup_reg(), combine_instructions(), combine_stack_adjustments_for_block(), copy_src_to_dest(), cse_extended_basic_block(), delete_dead_insn(), delete_output_reload(), delete_scheduled_jump(), distribute_notes(), doloop_register_get(), duplicate_insns_of_cycles(), emit_output_reload_insns(), emit_push_insn(), emit_store_flag_force(), emit_use_return_register_into_block(), expand_call(), expand_divmod(), expand_function_start(), fill_simple_delay_slots(), fill_slots_from_thread(), find_reloads(), find_split_point(), flow_find_cross_jump(), flow_find_head_matching_sequence(), fold_rtx(), forward_propagate_and_simplify(), forward_propagate_into(), gcse_emit_move_after(), gen_reload_chain_without_interm_reg_p(), if_test_bypass_p(), init_label_info(), lra_delete_dead_insn(), make_safe_from(), may_alias_p(), maybe_strip_eq_note_for_split_iv(), next_cc0_user(), next_flags_user(), noce_get_alt_condition(), optimize_reg_copy_1(), optimize_reg_copy_2(), push_reload(), record_stack_refs(), redundant_insn(), reg_mentioned_p(), reg_overlap_mentioned_for_reload_p(), reg_overlap_mentioned_p(), regmove_backward_pass(), rehash_using_reg(), reloads_unique_chain_p(), scan_loop(), simple_mem(), simplify_if_then_else(), sms_schedule(), store_data_bypass_p(), swap_rtx_condition(), true_dependence_1(), try_back_substitute_reg(), try_combine(), try_head_merge_bb(), try_redirect_by_replacing_jump(), try_replace_reg(), unmentioned_reg_p_1(), update_equiv_regs(), and write_dependence_p().
unsigned int reg_or_subregno | ( | const_rtx | ) |
Referenced by add_equal_note(), can_combine_p(), check_cond_move_block(), combinable_i3pat(), conflicts_with_override(), convert_move(), delete_prior_computation(), distribute_links(), distribute_notes(), emit_move_complex_parts(), expand_asm_operands(), expand_atomic_compare_and_swap(), expand_expr_real_2(), fill_slots_from_thread(), find_call_crossed_cheap_reg(), find_inc(), find_mem(), fixup_match_2(), gen_reload(), init_alias_analysis(), match_asm_constraints_1(), no_conflict_move_test(), noce_get_alt_condition(), noce_process_if_block(), optimize_reg_copy_1(), process_bb_node_lives(), record_value_for_reg(), reg_overlap_mentioned_p(), reg_referenced_p(), reg_used_between_p(), reg_used_on_edge(), regmove_backward_pass(), set_of_1(), subst(), try_combine(), validate_equiv_mem(), and validate_equiv_mem_from_store().
enum reg_class reg_preferred_class | ( | int | ) |
Referenced by autoinc_var_is_used_p(), combinable_i3pat(), cse_condition_code_reg(), curr_insn_transform(), delete_address_reloads_1(), delete_computation(), distribute_links(), distribute_notes(), fill_slots_from_thread(), find_moveable_pseudos(), find_reloads(), insert_one_insn(), move_deaths(), note_add_store(), reg_referenced_p(), set_live_p(), set_nonzero_bits_and_sign_copies(), try_combine(), and update_reg_dead_notes().
void reg_scan | ( | rtx | , |
unsigned | int | ||
) |
Referenced by can_combine_p(), eliminate_partially_redundant_load(), and modified_between_p().
Referenced by canonicalize_condition(), cse_cc_succs(), cse_change_cc_mode_insns(), cse_condition_code_reg(), curr_insn_transform(), delete_address_reloads_1(), delete_prior_computation(), distribute_links(), distribute_notes(), emit_reload_insns(), fill_slots_from_thread(), find_last_value(), find_reloads(), fix_reg_dead_note(), fixup_match_2(), modified_in_p(), move_deaths(), optimize_reg_copy_1(), optimize_reg_copy_2(), optimize_reg_copy_3(), reg_killed_on_edge(), reg_set_between_p(), regmove_backward_pass(), reload(), reload_as_needed(), reload_cse_move2add(), and try_combine().
Referenced by can_combine_p(), eliminate_partially_redundant_load(), no_conflict_move_test(), and try_combine().
void regclass | ( | rtx | , |
int | |||
) |
Referenced by add_constraint().
Referenced by regno_use_in().
void reinit_regs | ( | void | ) |
The same as previous function plus initializing IRA.
References init_regs(), and ira_init().
Referenced by globalize_reg().
void remove_insn | ( | rtx | ) |
Referenced by delete_insn(), and expand_builtin().
Referenced by canonicalize_insn(), combine_btr_defs(), cprop_jump(), cse_insn(), dead_or_predicable(), delete_insn(), emit_delay_sequence(), emit_libcall_block_1(), fix_reg_dead_note(), fixup_eh_region_note(), fixup_partition_crossing(), fixup_tail_calls(), force_nonfallthru_and_redirect(), init_label_info(), maybe_strip_eq_note_for_split_iv(), merge_notes(), move_invariant_reg(), no_equiv(), noce_process_if_block(), optimize_reg_copy_1(), optimize_reg_copy_2(), optimize_reg_copy_3(), patch_jump_insn(), purge_dead_edges(), redirect_jump_2(), reemit_notes(), regmove_backward_pass(), reload_as_needed(), remove_death(), remove_reachable_equiv_notes(), remove_reg_equal_equiv_notes_for_regno(), replace_store_insn(), resolve_reg_notes(), subst_stack_regs_pat(), try_back_substitute_reg(), try_combine(), try_eliminate_compare(), try_replace_reg(), update_equiv_regs(), update_reg_dead_notes(), and update_reg_unused_notes().
void remove_reg_equal_equiv_notes | ( | rtx | ) |
Referenced by adjust_for_new_dest(), and reload_combine_recognize_pattern().
void remove_reg_equal_equiv_notes_for_regno | ( | unsigned | int | ) |
Referenced by dead_or_predicable(), and remove_reg_equal_equiv_notes_for_defs().
int replace_label | ( | rtx * | , |
void * | |||
) |
Referenced by outgoing_edges_match(), replace_label(), and try_crossjump_to_edge().
void reposition_prologue_and_epilogue_notes | ( | void | ) |
In function.c
Reposition the prologue-end and epilogue-begin notes after instruction scheduling.
References contains(), epilogue_insn_hash, first, get_insns(), last, len, prologue_insn_hash, reorder_insns(), and edge_def::src.
Referenced by sched_rgn_finish(), and schedule_ebbs_finish().
void reset_used_flags | ( | rtx | ) |
bool resize_reg_info | ( | void | ) |
reginfo.c
Resize reg info.
Resize reg info. The new elements will be initialized. Return TRUE if new pseudos were added since the last call.
References allocate_reg_info(), reg_pref::allocnoclass, reg_pref::altclass, max_reg_num(), memset(), reg_pref::prefclass, reg_info_size, and reg_renumber.
Referenced by expand_reg_data(), expand_reg_info(), find_costs_and_classes(), ira(), lra_get_allocno_class(), lra_get_regno_hard_regno(), and move_invariants().
int returnjump_p | ( | rtx | ) |
enum rtx_code reverse_condition | ( | enum | rtx_code | ) |
In jump.c
enum rtx_code reverse_condition_maybe_unordered | ( | enum | rtx_code | ) |
enum rtx_code reversed_comparison_code_parts | ( | enum rtx_code | code, |
const_rtx | arg0, | ||
const_rtx | arg1, | ||
const_rtx | insn | ||
) |
Given a comparison (CODE ARG0 ARG1), inside an insn, INSN, return a code of reversed comparison if it is possible to do so. Otherwise return UNKNOWN. UNKNOWN may be returned in case we are having CC_MODE compare and we don't know whether it's source is floating point or integer comparison. Machine description should define REVERSIBLE_CC_MODE and REVERSE_CONDITION macros to help this function avoid overhead in these cases.
References prev_nonnote_insn(), reverse_condition(), reverse_condition_maybe_unordered(), RTX_COMM_COMPARE, RTX_COMPARE, rtx_equal_p(), SET, and set_of().
Referenced by combine_simplify_rtx(), emit_conditional_move(), record_jump_equiv(), and reversed_comparison_code().
|
inlinestatic |
Force the REGNO macro to only be used on the lhs.
void rtl_check_failed_block_symbol | ( | const char * | , |
int | , | ||
const char * | |||
) |
void rtl_check_failed_bounds | ( | const_rtx | , |
int | , | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_check_failed_code1 | ( | const_rtx | , |
enum | rtx_code, | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_check_failed_code2 | ( | const_rtx | , |
enum | rtx_code, | ||
enum | rtx_code, | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_check_failed_code_mode | ( | const_rtx | , |
enum | rtx_code, | ||
enum | machine_mode, | ||
bool | , | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_check_failed_flag | ( | const char * | , |
const_rtx | , | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_check_failed_type1 | ( | const_rtx | , |
int | , | ||
int | , | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_check_failed_type2 | ( | const_rtx | , |
int | , | ||
int | , | ||
int | , | ||
const char * | , | ||
int | , | ||
const char * | |||
) |
References internal_error(), and trim_filename().
void rtl_dump_bb_for_graph | ( | pretty_printer * | , |
basic_block | |||
) |
rtvec rtvec_alloc | ( | int | ) |
void rtvec_check_failed_bounds | ( | const_rtvec | r, |
int | n, | ||
const char * | file, | ||
int | line, | ||
const char * | func | ||
) |
XXX Maybe print the vector?
References internal_error(), and trim_filename().
int rtx_addr_can_trap_p | ( | const_rtx | ) |
Referenced by deps_may_trap_p(), and find_comparison_args().
bool rtx_addr_varies_p | ( | const_rtx | , |
bool | |||
) |
Referenced by rtx_addr_varies_p().
rtx rtx_alloc_stat | ( | RTX_CODE | MEM_STAT_DECL | ) |
In rtl.c
int rtx_cost | ( | rtx | , |
enum | rtx_code, | ||
int | , | ||
bool | |||
) |
int rtx_equal_p_cb | ( | const_rtx | , |
const_rtx | , | ||
rtx_equal_p_callback_function | |||
) |
unsigned int rtx_size | ( | const_rtx | ) |
In rtl.c
double_int rtx_to_double_int | ( | const_rtx | ) |
int rtx_to_tree_code | ( | enum | rtx_code | ) |
Translates rtx code to tree code, for those codes needed by REAL_ARITHMETIC. The function returns an int because the caller may not know what `enum tree_code' means.
int rtx_unstable_p | ( | const_rtx | ) |
Referenced by rtx_unstable_p().
bool rtx_varies_p | ( | const_rtx | , |
bool | |||
) |
void save_register_info | ( | void | ) |
void schedule_ebbs | ( | void | ) |
In sched-ebb.c.
The main entry point in this file.
References edge_def::dest, find_fallthru_edge(), basic_block_def::flags, basic_block_def::next_bb, edge_def::probability, probability_cutoff, profile_info, schedule_ebb(), schedule_ebbs_finish(), schedule_ebbs_init(), and basic_block_def::succs.
Referenced by rest_of_handle_sched2().
void schedule_insns | ( | void | ) |
In sched-rgn.c.
The one entry point in this file.
References bitmap_clear(), dbg_cnt(), haifa_sched_finish(), haifa_sched_init(), nr_regions, reload_completed, rgn_setup_common_sched_info(), rgn_setup_sched_infos(), sched_rgn_finish(), sched_rgn_init(), and schedule_region().
Referenced by rest_of_handle_sched(), and rest_of_handle_sched2().
void sel_sched_fix_param | ( | const char * | param, |
const char * | val | ||
) |
In sel-sched-dump.c.
void set_curr_insn_location | ( | location_t | ) |
void set_insn_deleted | ( | rtx | ) |
int set_noop_p | ( | const_rtx | ) |
Referenced by canonicalize_condition(), chain_to_prev_insn_p(), reg_set_p(), and reversed_comparison_code_parts().
void set_return_jump_label | ( | rtx | ) |
|
inlinestatic |
Return the cost of SET X. SPEED_P is true if optimizing for speed rather than size.
References rtx_cost().
Referenced by attempt_change(), compute_costs(), create_new_invariant(), and seq_cost().
|
inlinestatic |
Return the cost of moving X into a register, relative to the cost of a register move. SPEED_P is true if optimizing for speed rather than size.
References rtx_cost(), and SET.
Referenced by attempt_change(), avoid_expensive_constant(), calculate_elim_costs_all_insns(), compress_float_constant(), computation_cost(), compute_costs(), create_new_invariant(), distribute_and_simplify_rtx(), doloop_optimize(), expand_compound_operation(), expand_mult(), expand_smod_pow2(), find_shift_sequence(), force_to_mode(), init_expmed(), init_expmed_one_conv(), init_expmed_one_mode(), insn_rtx_cost(), lshift_cheap_p(), make_extraction(), mult_by_coeff_cost(), noce_try_sign_mask(), note_reg_elim_costly(), precompute_register_parameters(), reload_cse_simplify_operands(), reload_cse_simplify_set(), seq_cost(), shift_cost(), should_replace_address(), simplify_binary_operation_1(), try_fwprop_subst(), try_replace_in_use(), and want_to_gcse_p().
void set_used_flags | ( | rtx | ) |
int sets_cc0_p | ( | const_rtx | ) |
void setup_reg_classes | ( | int | regno, |
enum reg_class | prefclass, | ||
enum reg_class | altclass, | ||
enum reg_class | allocnoclass | ||
) |
Set up preferred, alternate, and allocno classes for REGNO as PREFCLASS, ALTCLASS, and ALLOCNOCLASS.
References reg_pref::allocnoclass, reg_pref::altclass, max_reg_num(), and reg_pref::prefclass.
Referenced by change_class(), expand_reg_info(), find_costs_and_classes(), lra_create_new_reg_with_unique_value(), move_invariants(), and setup_preferred_alternate_classes_for_new_pseudos().
bool shared_const_p | ( | const_rtx | ) |
int sibcall_epilogue_contains | ( | const_rtx | ) |
int side_effects_p | ( | const_rtx | ) |
Referenced by add_insn_allocno_copies(), build_constructor(), can_combine_p(), check_cond_move_block(), count_reg_usage(), cselib_add_permanent_equiv(), cselib_record_set(), delete_computation(), delete_dead_insn(), delete_prior_computation(), delete_trivially_dead_insns(), distribute_notes(), eliminate_partially_redundant_loads(), expand_builtin_prefetch(), fill_slots_from_thread(), find_moveable_store(), find_split_point(), flow_find_cross_jump(), fold_rtx(), force_to_mode(), get_reload_reg(), if_then_else_cond(), known_cond(), lra_coalesce(), lra_delete_dead_insn(), maybe_legitimize_operand_same_code(), noce_get_condition(), noce_operand_ok(), noce_process_if_block(), noce_try_sign_mask(), only_sets_cc0_p(), onlyjump_p(), propagate_rtx_1(), reload_cse_simplify_operands(), reload_cse_simplify_set(), resolve_simple_move(), rtl_can_remove_branch_p(), scan_one_insn(), sched_insn_is_legitimate_for_speculation_p(), set_live_p(), set_noop_p(), side_effects_p(), simple_mem(), simplify_binary_operation_1(), simplify_const_relational_operation(), simplify_if_then_else(), simplify_relational_operation_1(), simplify_set(), simplify_shift_const_1(), simplify_ternary_operation(), simplify_unary_operation_1(), single_set_2(), store_expr(), thread_jump(), try_combine(), try_redirect_by_replacing_jump(), and validate_equiv_mem().
enum rtx_code signed_condition | ( | enum | rtx_code | ) |
int simplejump_p | ( | const_rtx | ) |
Simplify a binary operation CODE with result mode MODE, operating on OP0 and OP1. Return 0 if no simplification is possible. Don't use this for relational operations such as EQ or LT. Use simplify_relational_operation instead.
References avoid_constant_pool_reference(), RTX_COMM_ARITH, RTX_COMM_COMPARE, RTX_COMPARE, simplify_binary_operation_1(), simplify_const_binary_operation(), and swap_commutative_operands_p().
Referenced by combine_simplify_rtx(), eliminate_constant_term(), expand_and(), fold_rtx(), force_to_mode(), simplify_associative_operation(), simplify_binary_operation_1(), simplify_comparison(), simplify_const_binary_operation(), simplify_const_relational_operation(), simplify_expand_binop(), simplify_gen_binary(), simplify_plus_minus(), and simplify_rtx().
References double_int::alshift(), dconst0, double_int::divmod_with_overflow(), f1, gen_int_mode(), gen_rtx_CONST_VECTOR(), HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT_M1U, immed_double_int_const(), double_int::lrotate(), real_arithmetic(), real_convert(), real_from_target(), real_identical(), real_to_target(), double_int::rrotate(), double_int::rshift(), rtvec_alloc(), rtx_to_double_int(), rtx_to_tree_code(), simplify_binary_operation(), double_int::smax(), double_int::smin(), double_int::umax(), double_int::umin(), and val_signbit_known_set_p().
Referenced by find_shift_sequence(), simplify_binary_operation(), simplify_plus_minus(), and simplify_shift_const_1().
rtx simplify_const_relational_operation | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
rtx | op0, | ||
rtx | op1 | ||
) |
Check if the given comparison (done in the given MODE) is actually a tautology or a contradiction. If no simplification is possible, this function returns zero. Otherwise, it returns either const_true_rtx or const0_rtx.
References avoid_constant_pool_reference(), CMP_EQ, CMP_GT, CMP_GTU, CMP_LT, CMP_LTU, comparison_result(), const_true_rtx, d1, get_mode_bounds(), HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, nonzero_address_p(), nonzero_bits(), num_sign_bit_copies(), rtx_equal_p(), side_effects_p(), signed_condition(), simplify_binary_operation(), simplify_const_relational_operation(), swap_commutative_operands_p(), swap_condition(), val_signbit_known_set_p(), WARN_STRICT_OVERFLOW_CONDITIONAL, and warning().
Referenced by simplify_const_relational_operation(), and simplify_relational_operation().
rtx simplify_const_unary_operation | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
rtx | op, | ||
enum machine_mode | op_mode | ||
) |
In simplify-rtx.c
Try to compute the value of a unary operation CODE whose output mode is to be MODE with input operand OP whose mode was originally OP_MODE. Return zero if the value cannot be computed.
References ctz_hwi(), ffs_hwi(), first, floor_log2(), double_int::from_pair(), double_int::from_shwi(), double_int::from_uhwi(), gen_int_mode(), gen_rtx_CONST_VECTOR(), double_int::high, HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, HOST_WIDE_INT_M1U, immed_double_const(), immed_double_int_const(), double_int::is_negative(), double_int::low, real_arithmetic(), real_convert(), real_from_integer(), real_from_target(), real_isnan(), real_sqrt(), real_to_target(), real_value_abs(), real_value_negate(), real_value_truncate(), rtvec_alloc(), simplify_unary_operation(), and val_signbit_known_set_p().
Referenced by make_compound_operation(), and simplify_unary_operation().
Make a binary operation by properly ordering the operands and seeing if the expression folds.
References RTX_COMM_ARITH, simplify_binary_operation(), and swap_commutative_operands_p().
Referenced by anti_adjust_stack_and_probe(), apply_distributive_law(), break_out_memory_refs(), canon_reg_for_combine(), combine_simplify_rtx(), combine_var_copies_in_loop_exit(), distribute_and_simplify_rtx(), doloop_modify(), emit_block_move_via_loop(), expand_debug_expr(), expand_expr_addr_expr_1(), expand_expr_real_1(), expand_expr_real_2(), expand_field_assignment(), expand_shift_1(), extract_left_shift(), find_split_point(), fold_rtx(), force_to_mode(), gen_addr_rtx(), get_biv_step_1(), get_iv_value(), if_then_else_cond(), implies_p(), instantiate_virtual_regs_in_insn(), instantiate_virtual_regs_in_rtx(), iv_add(), iv_analyze_biv(), iv_mult(), iv_number_of_iterations(), iv_shift(), iv_subreg(), make_compound_operation(), noce_try_bitop(), offset_address(), probe_stack_range(), process_address(), propagate_rtx_1(), reverse_op(), simplify_and_const_int(), simplify_and_const_int_1(), simplify_associative_operation(), simplify_binary_operation_1(), simplify_byte_swapping_operation(), simplify_comparison(), simplify_if_then_else(), simplify_relational_operation_1(), simplify_replace_fn_rtx(), simplify_rtx(), simplify_set(), simplify_shift_const(), simplify_shift_const_1(), simplify_truncation(), simplify_unary_operation_1(), simplify_while_replacing(), split_iv(), try_combine(), unroll_loop_runtime_iterations(), and use_narrower_mode().
rtx simplify_gen_relational | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
enum machine_mode | cmp_mode, | ||
rtx | op0, | ||
rtx | op1 | ||
) |
Likewise, for relational operations. CMP_MODE specifies mode comparison is done in.
References simplify_relational_operation().
Referenced by canon_reg_for_combine(), combine_simplify_rtx(), determine_max_iter(), emit_conditional_add(), emit_conditional_move(), expand_debug_expr(), if_then_else_cond(), iv_number_of_iterations(), may_unswitch_on(), prepare_float_lib_cmp(), propagate_rtx_1(), reversed_comparison(), shorten_into_mode(), simplify_binary_operation_1(), simplify_if_then_else(), simplify_relational_operation(), simplify_relational_operation_1(), simplify_replace_fn_rtx(), simplify_ternary_operation(), and simplify_unary_operation_1().
rtx simplify_gen_subreg | ( | enum machine_mode | outermode, |
rtx | op, | ||
enum machine_mode | innermode, | ||
unsigned int | byte | ||
) |
Make a SUBREG operation or equivalent if it folds.
References gen_rtx_SUBREG(), simplify_subreg(), and validate_subreg().
Referenced by adjust_mems(), convert_debug_memory_address(), convert_modes(), convert_move(), cse_insn(), cselib_expand_value_rtx_1(), emit_group_load_1(), emit_group_store(), emit_move_change_mode(), emit_store_flag_1(), expand_assignment(), expand_debug_expr(), expand_debug_source_expr(), expand_expr_real_2(), expand_twoval_binop_libfunc(), extract_bit_field_1(), find_reloads_toplev(), find_replacement(), force_operand(), gen_highpart(), gen_highpart_mode(), gen_lowpart_common(), gen_lowpart_for_combine(), if_then_else_cond(), instantiate_virtual_regs_in_insn(), loc_equivalence_change_p(), lowpart_subreg(), lra_eliminate_regs_1(), operand_subword(), propagate_rtx_1(), read_complex_part(), resolve_simple_move(), simplify_gen_subreg_concatn(), simplify_replace_fn_rtx(), simplify_subreg_concatn(), simplify_truncation(), store_bit_field_1(), store_bit_field_using_insv(), vt_expand_loc_callback(), and write_complex_part().
rtx simplify_gen_ternary | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
enum machine_mode | op0_mode, | ||
rtx | op0, | ||
rtx | op1, | ||
rtx | op2 | ||
) |
Likewise for ternary operations.
References simplify_ternary_operation().
Referenced by canon_reg_for_combine(), expand_debug_expr(), prepare_float_lib_cmp(), propagate_rtx_1(), simplify_replace_fn_rtx(), and simplify_ternary_operation().
rtx simplify_gen_unary | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
rtx | op, | ||
enum machine_mode | op_mode | ||
) |
Make a unary operation by first seeing if it folds and otherwise making the specified operation.
References simplify_unary_operation().
Referenced by add_equal_note(), apply_distributive_law(), canon_reg_for_combine(), canonicalize_iv_subregs(), combine_simplify_rtx(), doloop_optimize(), expand_debug_expr(), expand_debug_source_expr(), expand_field_assignment(), expand_shift_1(), expand_unop(), extract_left_shift(), force_to_mode(), gen_lowpart_or_truncate(), get_iv_value(), if_then_else_cond(), insert_var_expansion_initialization(), iv_add(), iv_extend(), iv_neg(), iv_number_of_iterations(), known_cond(), make_compound_operation(), make_extraction(), propagate_rtx_1(), simplify_binary_operation_1(), simplify_byte_swapping_operation(), simplify_comparison(), simplify_if_then_else(), simplify_relational_operation_1(), simplify_replace_fn_rtx(), simplify_set(), simplify_shift_const_1(), simplify_truncation(), simplify_unary_operation_1(), and simplify_while_replacing().
rtx simplify_relational_operation | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
enum machine_mode | cmp_mode, | ||
rtx | op0, | ||
rtx | op1 | ||
) |
Like simplify_binary_operation except used for relational operators. MODE is the mode of the result. If MODE is VOIDmode, both operands must not also be VOIDmode. CMP_MODE specifies in which mode the comparison is done in, so it is the mode of the operands. If CMP_MODE is VOIDmode, it is taken from the operands or, if both are VOIDmode, the operands are compared in "infinite precision".
References avoid_constant_pool_reference(), rtvec_alloc(), simplify_const_relational_operation(), simplify_gen_relational(), simplify_relational_operation_1(), swap_commutative_operands_p(), and swap_condition().
Referenced by combine_simplify_rtx(), cselib_expand_value_rtx_1(), do_compare_rtx_and_jump(), expand_doubleword_shift(), fold_rtx(), simplify_gen_relational(), simplify_rtx(), simplify_set(), and simplify_ternary_operation().
rtx simplify_replace_fn_rtx | ( | rtx | x, |
const_rtx | old_rtx, | ||
rtx(*)(rtx, const_rtx, void *) | fn, | ||
void * | data | ||
) |
If FN is NULL, replace all occurrences of OLD_RTX in X with copy_rtx (DATA) and simplify the result. If FN is non-NULL, call this callback on each X, if it returns non-NULL, replace X with its return value and simplify the result.
References copy_rtx(), replace_equiv_address_nv(), RTX_BIN_ARITH, RTX_BITFIELD_OPS, RTX_COMM_ARITH, RTX_COMM_COMPARE, RTX_COMPARE, rtx_equal_p(), RTX_EXTRA, RTX_OBJ, RTX_TERNARY, RTX_UNARY, shallow_copy_rtvec(), simplify_gen_binary(), simplify_gen_relational(), simplify_gen_subreg(), simplify_gen_ternary(), simplify_gen_unary(), and simplify_replace_fn_rtx().
Referenced by adjust_cleared_regs(), adjust_mem_stores(), adjust_mem_uses(), adjust_mems(), delete_trivially_dead_insns(), lra_constraints(), prepare_call_arguments(), propagate_for_debug(), simplify_replace_fn_rtx(), simplify_replace_rtx(), and update_equiv_regs().
rtx simplify_subreg | ( | enum machine_mode | outermode, |
rtx | op, | ||
enum machine_mode | innermode, | ||
unsigned int | byte | ||
) |
Simplify SUBREG:OUTERMODE(OP:INNERMODE, BYTE) Return 0 if no simplifications are possible.
References gen_rtx_REG_offset(), gen_rtx_SUBREG(), have_insn_for(), mode_dependent_address_p(), offset, simplify_plus_minus_op_data::op, SET, simplify_immed_subreg(), simplify_subreg(), simplify_subreg_regno(), simplify_truncation(), subreg_lowpart_offset(), subreg_lowpart_p(), subreg_lsb_1(), and validate_subreg().
Referenced by alter_subreg(), assemble_integer(), avoid_constant_pool_reference(), combine_simplify_rtx(), emit_move_change_mode(), emit_note_insn_var_location(), equiv_constant(), expand_expr_real_2(), extract_low_bits(), find_reloads_subreg_address(), find_shift_sequence(), kill_value(), known_cond(), make_compound_operation(), prepare_call_arguments(), replace_rtx(), simplify_gen_subreg(), simplify_rtx(), simplify_subreg(), simplify_while_replacing(), store_bit_field_using_insv(), and subst().
int simplify_subreg_regno | ( | unsigned int | xregno, |
enum machine_mode | xmode, | ||
unsigned int | offset, | ||
enum machine_mode | ymode | ||
) |
Return the number of a YMODE register to which (subreg:YMODE (reg:XMODE XREGNO) OFFSET) can be simplified. Return -1 if the subreg can't be simplified. XREGNO is a hard register number.
References lra_in_progress, subreg_info::offset, reload_completed, subreg_info::representable_p, and subreg_get_info().
Referenced by can_decompose_p(), curr_insn_transform(), find_reloads(), process_single_reg_class_operands(), simplify_operand_subreg(), and simplify_subreg().
Referenced by output_addr_const().
rtx simplify_ternary_operation | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
enum machine_mode | op0_mode, | ||
rtx | op0, | ||
rtx | op1, | ||
rtx | op2 | ||
) |
Simplify CODE, an operation with result mode MODE and three operands, OP0, OP1, and OP2. OP0_MODE was the mode of OP0 before it became a constant. Return 0 if no simplifications is possible.
References avoid_constant_pool_reference(), gen_int_mode(), gen_rtx_CONST_VECTOR(), HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, reversed_comparison_code(), rtvec_alloc(), rtx_equal_p(), side_effects_p(), simplify_gen_relational(), simplify_gen_ternary(), simplify_relational_operation(), simplify_unary_operation(), and swap_commutative_operands_p().
Referenced by combine_simplify_rtx(), cselib_expand_value_rtx_1(), fold_rtx(), simplify_gen_ternary(), and simplify_rtx().
rtx simplify_unary_operation | ( | enum rtx_code | code, |
enum machine_mode | mode, | ||
rtx | op, | ||
enum machine_mode | op_mode | ||
) |
Try to simplify a unary operation CODE whose output mode is to be MODE with input operand OP whose mode was originally OP_MODE. Return zero if no simplification can be made.
References avoid_constant_pool_reference(), simplify_const_unary_operation(), and simplify_unary_operation_1().
Referenced by combine_simplify_rtx(), convert_memory_address_addr_space(), cselib_expand_value_rtx_1(), expand_copysign(), expand_copysign_absneg(), fold_rtx(), known_cond(), make_extraction(), negate_rtx(), replace_rtx(), simplify_binary_operation_1(), simplify_comparison(), simplify_const_unary_operation(), simplify_gen_unary(), simplify_rtx(), simplify_ternary_operation(), simplify_unary_operation_1(), and subst().
void split_all_insns | ( | void | ) |
Split all insns in the function. If UPD_LIFE, update life info after.
References bitmap_clear(), bitmap_set_bit(), changed, default_rtl_profile(), delete_insn_and_edges(), find_many_sub_basic_blocks(), basic_block_def::index, reload_completed, rtl_profile_for_bb(), sbitmap_alloc(), sbitmap_free(), set_noop_p(), split_insn(), and verify_flow_info().
Referenced by rest_of_handle_split_after_reload(), rest_of_handle_split_all_insns(), rest_of_handle_split_before_regstack(), and rest_of_handle_split_before_sched2().
unsigned int split_all_insns_noflow | ( | void | ) |
Same as split_all_insns, but do not expect CFG to be available. Used by machine dependent reorg passes.
References delete_insn_and_edges(), get_insns(), reload_completed, set_noop_p(), and split_insn().
Referenced by emit_group_load_1().
In unknown file
Referenced by combine_split_insns(), and try_split().
int stack_regs_mentioned | ( | const_rtx | insn | ) |
void start_sequence | ( | void | ) |
Begin emitting insns to a sequence. If this sequence will contain something that might cause the compiler to pop arguments to function calls (because those pops have previously been deferred; see INHIBIT_DEFER_POP for more details), use do_pending_stack_adjust before calling this function. That will ensure that the deferred pops are not accidentally emitted in the middle of this sequence.
References sequence_stack::first, free_sequence_stack, get_insns(), get_last_insn(), sequence_stack::last, sequence_stack::next, set_first_insn(), and set_last_insn().
Referenced by add_test(), asan_clear_shadow(), asan_emit_stack_protection(), assign_parm_setup_reg(), check_and_process_move(), combine_var_copies_in_loop_exit(), compare_and_jump_seq(), compensate_edge(), computation_cost(), cond_move_process_if_block(), convert_move(), copy_src_to_dest(), curr_insn_transform(), doloop_modify(), dup_block_and_redirect(), dw2_build_landing_pads(), emit_delay_sequence(), emit_inc_dec_insn_before(), emit_initial_value_sets(), emit_move_list(), emit_move_multi_word(), emit_output_reload_insns(), emit_partition_copy(), emit_use_return_register_into_block(), expand_absneg_bit(), expand_atomic_fetch_op(), expand_binop(), expand_builtin_apply_args(), expand_builtin_int_roundingfn(), expand_builtin_int_roundingfn_2(), expand_builtin_mathfn(), expand_builtin_mathfn_2(), expand_builtin_mathfn_3(), expand_builtin_mathfn_ternary(), expand_builtin_saveregs(), expand_builtin_strlen(), expand_call(), expand_cond_expr_using_cmove(), expand_copysign_bit(), expand_ctz(), expand_doubleword_clz(), expand_expr_real_2(), expand_ffs(), expand_fix(), expand_fixed_convert(), expand_float(), expand_function_end(), expand_sdiv_pow2(), expand_twoval_binop_libfunc(), expand_unop(), expmed_mult_highpart_optab(), find_shift_sequence(), fix_crossing_unconditional_branches(), gen_clobber(), gen_cond_trap(), gen_move_insn(), gen_use(), generate_prolog_epilog(), get_address_cost(), get_arg_pointer_save_area(), gimple_expand_cfg(), gmalloc(), implicit_clobber_conflict_p(), inherit_in_ebb(), inherit_reload_reg(), init_set_costs(), initialize_uninitialized_regs(), insert_base_initialization(), insert_insn_on_edge(), insert_move_insn_before(), insert_value_copy_on_edge(), insert_var_expansion_initialization(), instantiate_virtual_regs_in_insn(), match_asm_constraints_1(), match_reload(), noce_emit_cmove(), noce_emit_move_insn(), noce_emit_store_flag(), noce_process_if_block(), noce_try_abs(), noce_try_addcc(), noce_try_bitop(), noce_try_cmove(), noce_try_cmove_arith(), noce_try_minmax(), noce_try_move(), noce_try_sign_mask(), noce_try_store_flag(), noce_try_store_flag_constants(), noce_try_store_flag_mask(), optimize_mode_switching(), prepare_float_lib_cmp(), process_addr_reg(), process_address(), process_insert_insn(), push_to_sequence(), push_to_sequence2(), push_topmost_sequence(), record_store(), replace_read(), resolve_shift_zext(), resolve_simple_move(), rtl_lv_add_condition_to_bb(), simplify_operand_subreg(), sjlj_emit_dispatch_table(), sjlj_emit_function_enter(), sjlj_emit_function_exit(), sjlj_mark_call_sites(), split_iv(), thread_prologue_and_epilogue_insns(), try_optimize_cfg(), and unroll_loop_runtime_iterations().
const char* str_pattern_slim | ( | const_rtx | ) |
Referenced by dump_insn_rtx_1(), model_recompute(), model_record_pressures(), and schedule_insn().
void subreg_get_info | ( | unsigned int | xregno, |
enum machine_mode | xmode, | ||
unsigned int | offset, | ||
enum machine_mode | ymode, | ||
struct subreg_info * | info | ||
) |
Fill in information about a subreg of a hard register. xregno - A regno of an inner hard subreg_reg (or what will become one). xmode - The mode of xregno. offset - The byte offset. ymode - The mode of a top level SUBREG (or what may become one). info - Pointer to structure to fill in.
References HOST_WIDE_INT, mode_for_size(), subreg_info::nregs, offset, subreg_info::offset, subreg_info::representable_p, and subreg_lowpart_offset().
Referenced by rtx_renumbered_equal_p(), simplify_subreg_regno(), subreg_nregs_with_regno(), subreg_offset_representable_p(), subreg_regno_offset(), and true_regnum().
unsigned int subreg_highpart_offset | ( | enum | machine_mode, |
enum | machine_mode | ||
) |
unsigned int subreg_lowpart_offset | ( | enum | machine_mode, |
enum | machine_mode | ||
) |
int subreg_lowpart_p | ( | const_rtx | ) |
unsigned int subreg_lsb | ( | const_rtx | ) |
Referenced by expand_field_assignment().
unsigned int subreg_lsb_1 | ( | enum machine_mode | outer_mode, |
enum machine_mode | inner_mode, | ||
unsigned int | subreg_byte | ||
) |
Helper function for subreg_lsb. Given a subreg's OUTER_MODE, INNER_MODE, and SUBREG_BYTE, return the bit offset where the subreg begins (counting from the least significant bit of the operand).
Referenced by simplify_subreg(), and subreg_lsb().
unsigned int subreg_nregs | ( | const_rtx | ) |
unsigned int subreg_nregs_with_regno | ( | unsigned | int, |
const_rtx | |||
) |
Referenced by subreg_nregs().
bool subreg_offset_representable_p | ( | unsigned int | xregno, |
enum machine_mode | xmode, | ||
unsigned int | offset, | ||
enum machine_mode | ymode | ||
) |
This function returns true when the offset is representable via subreg_offset in the given regno. xregno - A regno of an inner hard subreg_reg (or what will become one). xmode - The mode of xregno. offset - The byte offset. ymode - The mode of a top level SUBREG (or what may become one). RETURN - Whether the offset is representable.
References subreg_info::representable_p, and subreg_get_info().
Referenced by validate_subreg().
unsigned int subreg_regno | ( | const_rtx | ) |
Referenced by alter_subreg(), choose_reload_regs(), find_reloads_address_1(), mark_referenced_resources(), mark_set_regs(), mark_set_resources(), move2add_note_store(), move2add_record_mode(), push_reload(), refers_to_regno_for_reload_p(), refers_to_regno_p(), reg_overlap_mentioned_p(), reload_inner_reg_of_subreg(), and update_live_status().
unsigned int subreg_regno_offset | ( | unsigned int | xregno, |
enum machine_mode | xmode, | ||
unsigned int | offset, | ||
enum machine_mode | ymode | ||
) |
This function returns the regno offset of a subreg expression. xregno - A regno of an inner hard subreg_reg (or what will become one). xmode - The mode of xregno. offset - The byte offset. ymode - The mode of a top level SUBREG (or what may become one). RETURN - The regno offset which would be used.
References subreg_info::offset, and subreg_get_info().
Referenced by add_stored_regs(), choose_reload_regs(), constrain_operands(), df_ref_record(), find_dummy_reload(), find_reloads(), find_reloads_address_1(), get_hard_regno(), get_true_reg(), go_through_subreg(), maybe_mode_change(), move2add_valid_value_p(), operands_match_p(), push_reload(), reg_overlap_mentioned_for_reload_p(), reload_combine_note_store(), subreg_regno(), and var_lowpart().
Referenced by canon_condition(), canonicalize_change_group(), combine_simplify_rtx(), do_compare_rtx_and_jump(), emit_cmp_and_jump_insns(), emit_conditional_add(), emit_conditional_move(), emit_store_flag_1(), make_compound_operation(), simplify_associative_operation(), simplify_binary_operation(), simplify_comparison(), simplify_const_relational_operation(), simplify_gen_binary(), simplify_plus_minus(), simplify_relational_operation(), simplify_rtx(), simplify_ternary_operation(), and simplify_while_replacing().
enum rtx_code swap_condition | ( | enum | rtx_code | ) |
Referenced by bb_has_well_behaved_predecessors(), cfg_layout_can_duplicate_bb_p(), cond_exec_find_if_block(), create_trace_edges(), dead_or_predicable(), default_invalid_within_doloop(), delete_related_insns(), find_bb_boundaries(), fix_crossing_unconditional_branches(), force_nonfallthru_and_redirect(), get_last_bb_insn(), label_is_jump_target_p(), make_edges(), merge_blocks_move_successor_nojumps(), outgoing_edges_match(), patch_jump_insn(), rtl_can_remove_branch_p(), try_crossjump_to_edge(), try_optimize_cfg(), and try_redirect_by_replacing_jump().
int true_regnum | ( | const_rtx | ) |
HOST_WIDE_INT trunc_int_for_mode | ( | HOST_WIDE_INT | , |
enum | machine_mode | ||
) |
Generally useful functions.
In explow.c
bool truncated_to_mode | ( | enum | machine_mode, |
const_rtx | |||
) |
Referenced by simplify_unary_operation_1().
unsigned int unshare_all_rtl | ( | void | ) |
References get_insns(), and unshare_all_rtl_1().
Referenced by gimple_expand_cfg().
void unshare_all_rtl_again | ( | rtx | ) |
void unshare_all_rtl_in_chain | ( | rtx | ) |
enum rtx_code unsigned_condition | ( | enum | rtx_code | ) |
bool unsigned_reg_p | ( | rtx | ) |
void update_address | ( | struct address_info * | ) |
Referenced by equiv_address_substitution().
bool val_signbit_known_clear_p | ( | enum | machine_mode, |
unsigned | HOST_WIDE_INT | ||
) |
Referenced by emit_cstore(), simplify_set(), simplify_shift_const_1(), and simplify_unary_operation_1().
bool val_signbit_known_set_p | ( | enum | machine_mode, |
unsigned | HOST_WIDE_INT | ||
) |
Referenced by canonicalize_condition(), convert_modes(), emit_cstore(), emit_store_flag_1(), find_comparison_args(), nonzero_bits1(), reg_nonzero_bits_for_combine(), set_nonzero_bits_and_sign_copies(), simplify_comparison(), simplify_const_binary_operation(), simplify_const_relational_operation(), and simplify_const_unary_operation().
bool val_signbit_p | ( | enum | machine_mode, |
unsigned | HOST_WIDE_INT | ||
) |
Referenced by combine_simplify_rtx(), emit_store_flag(), emit_store_flag_1(), force_to_mode(), and simplify_binary_operation_1().
bool validate_subreg | ( | enum machine_mode | omode, |
enum machine_mode | imode, | ||
const_rtx | reg, | ||
unsigned int | offset | ||
) |
We want to create (subreg:OMODE (obj:IMODE) OFFSET). Return true if this construct would be valid, and false otherwise.
References lra_in_progress, subreg_lowpart_offset(), subreg_offset_representable_p(), and word_mode.
Referenced by extract_low_bits(), gen_lowpart_if_possible(), gen_rtx_SUBREG(), make_extraction(), simplify_gen_subreg(), simplify_subreg(), store_bit_field_1(), use_narrower_mode_test(), and valid_multiword_target_p().
unsigned int variable_tracking_main | ( | void | ) |
In var-tracking.c
References variable_tracking_main_1().
void verify_rtl_sharing | ( | void | ) |
Go through all the RTL insn bodies and check that there is no unexpected sharing in between the subexpressions.
References get_insns(), reset_all_used_flags(), timevar_pop(), timevar_push(), and verify_insn_sharing().
Referenced by execute_function_todo().
int volatile_insn_p | ( | const_rtx | ) |
int volatile_refs_p | ( | const_rtx | ) |
Referenced by can_combine_p(), deletable_insn_p_1(), final_scan_insn(), scan_insn(), and volatile_refs_p().
rtx cc0_rtx |
Referenced by canonicalize_condition(), combine_instructions(), cse_extended_basic_block(), cse_insn(), curr_insn_transform(), delete_computation(), delete_scheduled_jump(), distribute_notes(), emit_use_return_register_into_block(), fill_simple_delay_slots(), fill_slots_from_thread(), final_scan_insn(), find_moveable_pseudos(), find_reloads(), find_single_use(), find_split_point(), flow_find_cross_jump(), flow_find_head_matching_sequence(), hide_operands(), insert_one_insn(), redundant_insn(), set_live_p(), sets_cc0_p(), simplify_set(), subst(), subst_stack_regs_pat(), try_combine(), try_head_merge_bb(), and try_redirect_by_replacing_jump().
rtx const_int_rtx[MAX_SAVED_CONST_INT *2+1] |
We make one copy of (const_int C) where C is in [- MAX_SAVED_CONST_INT, MAX_SAVED_CONST_INT] to save space during the compilation and simplify comparisons of integers.
Referenced by gen_rtx_CONST_INT(), and init_emit_once().
rtx const_tiny_rtx[4][(int) MAX_MACHINE_MODE] |
We record floating-point CONST_DOUBLEs in each floating-point mode for the values of 0, 1, and 2. For the integer entries and VOIDmode, we record a copy of const[012]_rtx and constm1_rtx. CONSTM1_RTX is set only for MODE_INT and MODE_VECTOR_INT modes.
Referenced by gen_const_vector(), and init_emit_once().
rtx const_true_rtx |
Referenced by add_dependence(), block_has_only_trap(), combine_simplify_rtx(), comparison_result(), condition_dominates_p(), determine_max_iter(), eliminate_implied_condition(), expand_debug_expr(), fill_eager_delay_slots(), fill_simple_delay_slots(), fill_slots_from_thread(), final_scan_insn(), fold_rtx(), gen_rtx_CONST_INT(), get_branch_condition(), if_then_else_cond(), implies_p(), iv_number_of_iterations(), known_cond(), may_unswitch_on(), merge_if_block(), prepare_float_lib_cmp(), sched_analyze_insn(), sched_get_condition_with_rev(), simplify_binary_operation_1(), simplify_const_relational_operation(), simplify_if_then_else(), simplify_using_condition(), simplify_using_initial_values(), steal_delay_list_from_fallthrough(), steal_delay_list_from_target(), and unswitch_single_loop().
int cse_not_expected |
If this is nonzero, we do not bother generating VOLATILE around volatile memory references, and we are willing to output indirect addresses. If cse is to follow, we reject indirect addresses so a useful potential cse is generated; if it is used only once, instruction combination will produce the same indirect address eventually.
Referenced by get_address_cost(), memory_address_addr_space(), noce_try_cmove_arith(), prepare_function_start(), rest_of_handle_cse(), rest_of_handle_cse2(), rest_of_handle_cse_after_global_opts(), and use_anchored_address().
int currently_expanding_to_rtl |
Nonzero when we are expanding trees to RTL.
Referenced by expand_expr_real_1(), gimple_assign_rhs_to_tree(), gimple_expand_cfg(), patch_jump_insn(), and redirect_branch_edge().
struct target_rtl default_target_rtl |
@verbatim Emit RTL for the GCC expander.
Copyright (C) 1987-2013 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/.
Middle-to-low level generation of rtx code and insns. This file contains support functions for creating rtl expressions and manipulating them in the doubly-linked chain of insns. The patterns of the insns are created by machine-dependent routines in insn-emit.c, which is generated automatically from the machine description. These routines make the individual rtx's of the pattern with `gen_rtx_fmt_ee' and others in genrtl.[ch], which are automatically generated from rtl.def; what is machine dependent is the kind of rtx's they make and what arguments they use.
HARD_REG_SET eliminable_regset |
In ira.c
All registers that can be eliminated.
Referenced by add_regs_to_insn_regno_info(), build_insn_chain(), collect_non_operand_hard_regs(), get_regno_pressure_class(), inherit_in_ebb(), ira_setup_eliminable_regset(), mark_hard_reg_live(), need_for_split_p(), process_bb_lives(), process_bb_node_lives(), and update_reg_eliminate().
int epilogue_completed |
Nonzero after thread_prologue_and_epilogue_insns has run.
Referenced by cond_exec_find_if_block(), dead_or_predicable(), df_get_entry_block_def_set(), df_get_exit_block_use_set(), redirect_jump(), rest_of_clean_state(), rest_of_handle_branch_target_load_optimize1(), rest_of_handle_branch_target_load_optimize2(), and thread_prologue_and_epilogue_insns().
location_t epilogue_location |
Referenced by thread_prologue_and_epilogue_insns().
struct rtl_hooks general_rtl_hooks |
... but then it has to restore these.
@verbatim Generic hooks for the RTL middle-end.
Copyright (C) 2004-2013 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see http://www.gnu.org/licenses/.
For speed, we will copy the RTX hooks struct member-by-member instead of doing indirect calls. For these reason, we initialize *two* struct rtl_hooks globals: rtl_hooks is the one that is used to actually call the hooks, while general_rtl_hooks is used to restore the hooks by passes that modify them.
Referenced by combine_instructions(), and cse_main().
int generating_concat_p |
Nonzero when we are generating CONCATs.
Referenced by avoid_likely_spilled_reg(), expand_asm_operands(), expand_function_end(), gen_reg_rtx(), gimple_expand_cfg(), pop_function_context(), and prepare_function_start().
int lra_in_progress |
Set to 1 while in lra.
Referenced by emit_move_insn_1(), gen_rtx_REG(), general_operand(), lra(), register_operand(), scratch_operand(), simplify_subreg_regno(), true_regnum(), and validate_subreg().
const char* const note_insn_name[NOTE_INSN_MAX] |
Names for NOTE insn's other than line numbers.
Names for kinds of NOTEs and REG_NOTEs.
rtx pc_rtx |
Standard pieces of rtx, to be substituted directly into things.
Referenced by add_scope_conflicts_1(), add_stack_var(), bypass_block(), combine_simplify_rtx(), computed_jump_p(), condjump_in_parallel_p(), condjump_label(), convert_to_eh_region_ranges(), count_reg_usage(), cprop_jump(), cse_insn(), cselib_record_sets(), distribute_notes(), doloop_condition_get(), dw2_asm_output_encoded_addr_rtx(), dw2_asm_output_pcrel(), dwarf2out_flush_queued_reg_saves(), dwarf2out_frame_debug_cfa_offset(), dwarf2out_frame_debug_cfa_register(), expand_stack_vars(), final_scan_insn(), find_sets_in_insn(), gen_subprogram_die(), get_branch_condition(), gimple_expand_cfg(), initial_return_save(), internal_arg_pointer_based_exp(), internal_arg_pointer_based_exp_scan(), make_edges(), mark_effect(), mem_overlaps_already_clobbered_arg_p(), outgoing_edges_match(), patch_jump_insn(), prepare_call_arguments(), purge_dead_tablejump_edges(), record_jump_equiv(), redirect_exp_1(), sched_get_condition_with_rev_uncached(), set_label_offsets(), set_noop_p(), set_rtl(), simplify_if_then_else(), simplify_set(), thread_jump(), try_combine(), visit_conflict(), and visit_op().
const char* print_rtx_head |
In print-rtl.c
String printed at beginning of each RTL when it is dumped. This string is set to ASM_COMMENT_START when the RTL is dumped in the assembly output file.
Referenced by final_scan_insn(), print_insn_with_notes(), print_pattern(), print_rtl(), print_rtl_single_with_indent(), and print_rtx().
location_t prologue_location |
const char* const reg_note_name[] |
Names for REG_NOTE's in EXPR_LIST insn's.
int regstack_completed |
Nonzero after end of regstack pass. Set to 1 or 0 by reg-stack.c.
Referenced by df_ignore_stack_reg(), rest_of_clean_state(), and rest_of_handle_stack_regs().
int reload_completed |
Nonzero after end of reload pass. Set to 1 or 0 by reload1.c.
Nonzero after end of reload pass. Set to 1 or 0 by toplev.c. Controls the significance of (SUBREG (MEM)).
Referenced by active_insn_p(), add_branch_dependences(), apply_replacement(), asm_operand_ok(), can_move_insns_across(), can_replace_by(), cfg_layout_can_merge_blocks_p(), cfg_layout_finalize(), change_address_1(), check_asm_operands(), check_rtl(), choose_best_pseudo_reg(), cleanup_cfg(), compute_use_by_pseudos(), cond_exec_find_if_block(), cond_exec_process_insns(), create_log_links(), cselib_invalidate_regno(), cselib_process_insn(), deletable_insn_p(), deps_analyze_insn(), deps_start_bb(), df_exit_block_uses_collect(), df_get_eh_block_artificial_uses(), df_get_entry_block_def_set(), df_get_exit_block_use_set(), df_get_regular_block_artificial_uses(), df_insn_delete(), df_lr_local_compute(), dump_new_block_header(), dump_reg_info(), emit_move_complex_parts(), emit_move_multi_word(), equal_different_set_p(), extend_deps_reg_info(), extract_constrain_insn_cached(), find_best_reg_for_expr(), find_if_header(), fixup_fallthru_exit_predecessor(), gate_handle_postreload(), gate_postreload(), gen_lowpart_general(), gen_rtx_REG(), general_operand(), haifa_sched_finish(), hash_rtx_cb(), indirect_operand(), init_alias_analysis(), init_deps(), insn_invalid_p(), lra(), mark_unavailable_hard_regs(), maybe_extend_reg_info_p(), memory_operand(), moveup_expr(), noce_emit_cmove(), noce_find_if_block(), nonmemory_operand(), old_insns_match_p(), operand_subword(), peep2_find_free_register(), prepare_operand(), put_TImodes(), queue_to_ready(), record_store(), register_operand(), reload(), rest_of_clean_state(), restore_pattern(), rtl_can_merge_blocks(), rtl_for_decl_location(), scan_insn(), sched_analyze_insn(), sched_analyze_reg(), sched_init(), sched_rgn_finish(), schedule_block(), schedule_ebbs_finish(), schedule_insn(), schedule_insns(), sel_region_finish(), simplify_subreg_regno(), sms_schedule(), split_all_insns(), split_all_insns_noflow(), split_insn(), try_crossjump_to_edge(), try_optimize_cfg(), try_redirect_by_replacing_jump(), verify_rtx_sharing(), and verify_target_availability().
int reload_in_progress |
Set to 1 while reload_as_needed is operating. Required by some machines to handle any generated moves differently.
Referenced by change_address_1(), constrain_operands(), emit_move_change_mode(), emit_move_complex_parts(), emit_move_multi_word(), gen_rtx_REG(), insn_invalid_p(), reload(), and verify_rtx_sharing().
rtx ret_rtx |
enum rtx_class rtx_class[NUM_RTX_CODE] |
Indexed by rtx code, gives a character representing the "class" of that rtx code. See rtl.def for documentation on the defined classes.
const unsigned char rtx_code_size[NUM_RTX_CODE] |
Indexed by rtx code, gives the size of the rtx in bytes.
const char* const rtx_format[NUM_RTX_CODE] |
Indexed by rtx code, gives a sequence of operand-types for rtx's of that code. The sequence is a C string in which each character describes one operand.
const unsigned char rtx_length[NUM_RTX_CODE] |
const char* const rtx_name[NUM_RTX_CODE] |
const unsigned char rtx_next[NUM_RTX_CODE] |
rtx simple_return_rtx |
int split_branch_probability |
Probability of the conditional branch currently proceeded by try_split. Set to -1 otherwise.
Referenced by try_split().
rtx stack_limit_rtx |
In toplev.c
Referenced by allocate_dynamic_stack_space(), crash_signal(), expand_function_start(), and handle_common_deferred_options().
struct target_rtl* this_target_rtl |