GCC Middle and Back End API Reference
rtl.c File Reference

Functions

rtvec rtvec_alloc ()
rtvec shallow_copy_rtvec ()
unsigned int rtx_size ()
rtx rtx_alloc_stat ()
bool shared_const_p ()
rtx copy_rtx ()
rtx shallow_copy_rtx_stat ()
int rtx_equal_p_cb ()
int rtx_equal_p ()
hashval_t iterative_hash_rtx ()
void dump_rtx_statistics ()
void rtl_check_failed_bounds (const_rtx r, int n, const char *file, int line, const char *func)
void rtl_check_failed_type1 (const_rtx r, int n, int c1, const char *file, int line, const char *func)
void rtl_check_failed_type2 (const_rtx r, int n, int c1, int c2, const char *file, int line, const char *func)
void rtl_check_failed_code1 (const_rtx r, enum rtx_code code, const char *file, int line, const char *func)
void rtl_check_failed_code2 (const_rtx r, enum rtx_code code1, enum rtx_code code2, const char *file, int line, const char *func)
void rtl_check_failed_code_mode (const_rtx r, enum rtx_code code, enum machine_mode mode, bool not_mode, const char *file, int line, const char *func)
void rtl_check_failed_block_symbol ()
void rtvec_check_failed_bounds (const_rtvec r, int n, const char *file, int line, const char *func)
void rtl_check_failed_flag (const char *name, const_rtx r, const char *file, int line, const char *func)

Variables

const unsigned char rtx_length [NUM_RTX_CODE]
const char *const rtx_name [NUM_RTX_CODE]
const char *const rtx_format [NUM_RTX_CODE]
enum rtx_class rtx_class [NUM_RTX_CODE]
const unsigned char rtx_code_size [NUM_RTX_CODE]
const char *const note_insn_name [NOTE_INSN_MAX]
const char *const reg_note_name [REG_NOTE_MAX]
static int rtx_alloc_counts [(int) LAST_AND_UNUSED_RTX_CODE]
static int rtx_alloc_sizes [(int) LAST_AND_UNUSED_RTX_CODE]
static int rtvec_alloc_counts
static int rtvec_alloc_sizes
int generating_concat_p
int currently_expanding_to_rtl

Function Documentation

rtx copy_rtx ( )
Create a new copy of an rtx.
   Recursively copies the operands of the rtx,
   except for those few rtx codes that are sharable.   

References copy(), rtvec_alloc(), and shared_const_p().

Referenced by add_equal_note(), adjust_address_1(), adjust_decomposed_uses(), analyze_insn_to_expand_var(), canon_reg_for_combine(), check_and_process_move(), cleanup_auto_inc_dec(), combine_instructions(), combine_simplify_rtx(), cond_exec_process_insns(), confirm_change_group(), copy_delay_slot_insn(), cprop_jump(), create_insn_rtx_with_lhs(), create_insn_rtx_with_rhs(), create_speculation_check(), cse_insn(), cse_process_notes_1(), curr_insn_transform(), doloop_modify(), doloop_optimize(), duplicate_insns_of_cycles(), eliminate_partially_redundant_load(), eliminate_regs_1(), emit_libcall_block_1(), emit_move_insn(), expand_absneg_bit(), expand_assignment(), expand_binop(), expand_debug_expr(), expand_debug_parm_decl(), expand_expr_real_1(), expand_expr_real_2(), expand_field_assignment(), expand_fix(), expand_operands(), find_cond_trap(), find_reloads_address(), find_shift_sequence(), fold_rtx(), force_const_mem(), forward_propagate_and_simplify(), get_last_value(), get_secondary_mem(), get_stored_val(), if_then_else_cond(), implicit_clobber_conflict_p(), inherit_in_ebb(), init_eliminable_invariants(), insert_base_initialization(), insert_restore(), insert_save(), insert_set_in_table(), insert_store(), instantiate_virtual_regs_in_insn(), iv_number_of_iterations(), make_memloc(), match_reload(), noce_try_cmove_arith(), plus_constant(), process_addr_reg(), process_address(), process_insert_insn(), process_one_cond_exec(), process_rtx(), process_substs_on_one_elem(), propagate_for_debug_subst(), propagate_rtx(), record_value_for_reg(), remove_pseudos(), replace_label(), replace_reg_with_saved_mem(), resolve_shift_zext(), resolve_simple_move(), save_call_clobbered_regs(), schedule_reg_moves(), simplify_binary_operation_1(), simplify_if_then_else(), simplify_relational_operation_1(), simplify_replace_fn_rtx(), split_insn(), split_iv(), store_constructor(), store_constructor_field(), store_field(), store_fixed_bit_field(), subst(), subst_dup(), substitute_reg_in_expr(), try_combine(), try_eliminate_compare(), try_fwprop_subst(), try_replace_reg(), unroll_loop_runtime_iterations(), update_equiv_regs(), and update_ld_motion_stores().

void dump_rtx_statistics ( void  )
hashval_t iterative_hash_rtx ( )
Iteratively hash rtx X.   

References strlen().

Referenced by addr_table_entry_do_hash(), and hash_loc_operands().

void rtl_check_failed_block_symbol ( )
Report that line LINE of FILE tried to access the block symbol fields
   of a non-block symbol.  FUNC is the function that contains the line.   

References internal_error(), and trim_filename().

void rtl_check_failed_bounds ( const_rtx  r,
int  n,
const char *  file,
int  line,
const char *  func 
)
void rtl_check_failed_code1 ( const_rtx  r,
enum rtx_code  code,
const char *  file,
int  line,
const char *  func 
)
void rtl_check_failed_code2 ( const_rtx  r,
enum rtx_code  code1,
enum rtx_code  code2,
const char *  file,
int  line,
const char *  func 
)
void rtl_check_failed_code_mode ( const_rtx  r,
enum rtx_code  code,
enum machine_mode  mode,
bool  not_mode,
const char *  file,
int  line,
const char *  func 
)
void rtl_check_failed_flag ( const char *  name,
const_rtx  r,
const char *  file,
int  line,
const char *  func 
)
void rtl_check_failed_type1 ( const_rtx  r,
int  n,
int  c1,
const char *  file,
int  line,
const char *  func 
)
void rtl_check_failed_type2 ( const_rtx  r,
int  n,
int  c1,
int  c2,
const char *  file,
int  line,
const char *  func 
)
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().

rtx rtx_alloc_stat ( )
Allocate an rtx of code CODE.  The CODE is stored in the rtx;
   all the rest is initialized to zero.   

References ggc_alloc_rtx_def_stat(), memset(), rtx_alloc_counts, and rtx_alloc_sizes.

int rtx_equal_p ( )
Return 1 if X and Y are identical-looking rtx's.
   This is the Lisp function EQUAL for rtx arguments.
   Whenever changing this function check if rtx_equal_p_cb above doesn't need
   changing as well.   

Referenced by add_equal_note(), add_var_loc_to_decl(), addr_table_entry_eq(), all_uses_available_at(), allocate_dynamic_stack_space(), analyze_insn_to_expand_var(), apply_distributive_law(), attr_equal_p(), base_alias_check(), calculate_needs_all_insns(), can_combine_p(), can_replace_by(), canon_reg_for_combine(), canonicalize_condition(), canonicalize_insn(), change_address_1(), choose_reload_regs(), clobber_slot_part(), combinable_i3pat(), combine_reloads(), combine_simplify_rtx(), compare_and_jump_seq(), compare_loc_operands(), cond_move_process_if_block(), condition_dominates_p(), conditions_mutex_p(), const_desc_rtx_eq(), const_iteration_count(), count_occurrences(), cprop_jump(), cse_cc_succs(), cse_insn(), cselib_record_sets(), dbxout_reg_parms(), decompose_automod_address(), delegitimize_mem_from_attrs(), delete_address_reloads(), delete_address_reloads_1(), delete_output_reload(), delete_slot_part(), distribute_notes(), do_input_reload(), do_output_reload(), dw_val_equal_p(), eliminate_regs_in_insn(), emit_group_store(), emit_inc(), emit_input_reload_insns(), emit_move_insn(), emit_note_insn_var_location(), emit_output_reload_insns(), emit_store_flag(), invariant_group_base_hasher::equal(), equal_different_set_p(), expand_binop(), expand_call(), expand_mult(), expand_vec_perm_1(), fill_slots_from_thread(), final_scan_insn(), find_address(), find_args_size_adjust(), find_auto_inc(), find_btr_def_group(), find_call_crossed_cheap_reg(), find_call_stack_args(), find_comparisons_in_bb(), find_equiv_reg(), find_inc(), find_last_value(), find_loc_in_1pdv(), find_reg_fusage(), find_reloads(), find_reloads_address(), find_reloads_address_1(), find_reloads_subreg_address(), find_reloads_toplev(), find_src_set_src(), fold_rtx(), force_reg(), free_load_extend(), gcse_emit_move_after(), gen_reload(), get_attr_value(), get_biv_step_1(), get_dest_from_orig_ops(), get_hard_reg_initial_reg(), get_init_value(), get_reload_reg(), if_then_else_cond(), immune_p(), implies_p(), init_alias_analysis(), invariant_expr_equal_p(), ira_update_equiv_info_by_shuffle_insn(), iv_number_of_iterations(), kill_set_value(), known_cond(), lra_emit_move(), make_canonical(), make_compound_operation(), mark_referenced_resources(), match_asm_constraints_1(), may_unswitch_on(), maybe_propagate_label_ref(), merge_notes(), move2add_use_add3_insn(), noce_get_alt_condition(), noce_process_if_block(), noce_try_abs(), noce_try_addcc(), noce_try_bitop(), noce_try_cmove_arith(), noce_try_minmax(), noce_try_move(), noce_try_store_flag_mask(), nonoverlapping_memrefs_p(), old_insns_match_p(), optimize_reg_copy_3(), outgoing_edges_match(), parse_add_or_inc(), peep2_attempt(), propagate_for_debug_subst(), propagate_rtx_1(), push_reg_equiv_alt_mem(), push_reload(), record_jump_cond(), record_reg_classes(), record_store(), redundant_insn(), reg_mentioned_p(), reg_overlap_mentioned_for_reload_p(), relax_delay_slots(), reload_combine_note_use(), reload_combine_recognize_const_pattern(), reload_combine_recognize_pattern(), reload_cse_move2add(), reload_reg_free_for_value_p(), reloads_unique_chain_p(), reversed_comparison_code_parts(), rtx_equal_for_cselib_1(), rtx_equal_for_field_assignment_p(), rtx_equal_for_memref_p(), rtx_referenced_p_1(), rtx_renumbered_equal_p(), safe_from_p(), same_dw_val_p(), sdbout_reg_parms(), set_dest_equal_p(), set_noop_p(), set_of_1(), set_slot_part(), setup_reg_equiv(), should_replace_address(), simplify_binary_operation_1(), simplify_comparison(), simplify_const_relational_operation(), simplify_if_then_else(), simplify_relational_operation_1(), simplify_replace_fn_rtx(), simplify_rtx(), simplify_set(), simplify_shift_const_1(), simplify_ternary_operation(), simplify_using_condition(), split_insn(), store_expr(), subst_reg_equivs(), substitute(), swap_commutative_operands_with_target(), thread_jump(), try_back_substitute_reg(), try_combine(), try_eliminate_compare(), try_merge_delay_insns(), try_replace_in_use(), try_replace_reg(), try_split(), update_equiv_regs(), update_temp_slot_address(), use_related_value(), validate_change_1(), validate_replace_rtx_1(), validate_simplify_insn(), variable_part_different_p(), and variable_union().

int rtx_equal_p_cb ( )
Same as rtx_equal_p, but call CB on each pair of rtx if CB is not NULL.
   When the callback returns true, we continue with the new pair.
   Whenever changing this function check if rtx_equal_p below doesn't need
   changing as well.   
unsigned int rtx_size ( )
Return the number of bytes occupied by rtx value X.   

Referenced by shallow_copy_rtx_stat().

rtvec shallow_copy_rtvec ( )
Create a bitwise copy of VEC.   

References rtvec_def::elem, memcpy(), and rtvec_alloc().

Referenced by cselib_subst_to_values(), and simplify_replace_fn_rtx().

rtx shallow_copy_rtx_stat ( )
Create a new copy of an rtx.  Only copy just one level.   

References copy(), ggc_alloc_rtx_def_stat(), memcpy(), and rtx_size().

bool shared_const_p ( )

Variable Documentation

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().

const char* const note_insn_name[NOTE_INSN_MAX]
Initial value:
{
#define DEF_INSN_NOTE(NAME) #NAME,
#include "insn-notes.def"
#undef DEF_INSN_NOTE
}
Names for kinds of NOTEs and REG_NOTEs.   
const char* const reg_note_name[REG_NOTE_MAX]
Initial value:
{
#define DEF_REG_NOTE(NAME) #NAME,
#include "reg-notes.def"
#undef DEF_REG_NOTE
}
Names for REG_NOTE's in EXPR_LIST insn's.   
int rtvec_alloc_counts
static

Referenced by dump_rtx_statistics(), and rtvec_alloc().

int rtvec_alloc_sizes
static

Referenced by dump_rtx_statistics(), and rtvec_alloc().

int rtx_alloc_counts[(int) LAST_AND_UNUSED_RTX_CODE]
static
int rtx_alloc_sizes[(int) LAST_AND_UNUSED_RTX_CODE]
static
Initial value:
{
#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS,
#include "rtl.def"
#undef DEF_RTL_EXPR
}
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]
Initial value:
{
#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) \
(((ENUM) == CONST_INT || (ENUM) == CONST_DOUBLE \
|| (ENUM) == CONST_FIXED) \
? RTX_HDR_SIZE + (sizeof FORMAT - 1) * sizeof (HOST_WIDE_INT) \
: RTX_HDR_SIZE + (sizeof FORMAT - 1) * sizeof (rtunion)),
#include "rtl.def"
#undef DEF_RTL_EXPR
}
Indexed by rtx code, gives the size of the rtx in bytes.   
const char* const rtx_format[NUM_RTX_CODE]
Initial value:
{
#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) FORMAT ,
#include "rtl.def"
#undef DEF_RTL_EXPR
}
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]
Initial value:
{
#include "rtl.def"
}
const char* const rtx_name[NUM_RTX_CODE]
Initial value:
{
#include "rtl.def"
}