GCC Middle and Back End API Reference
|
Go to the source code of this file.
unsigned default_add_stmt_cost | ( | void * | data, |
int | count, | ||
enum vect_cost_for_stmt | kind, | ||
struct _stmt_vec_info * | stmt_info, | ||
int | misalign, | ||
enum vect_cost_model_location | where | ||
) |
By default, the cost model looks up the cost of the given statement kind and mode, multiplies it by the occurrence count, accumulates it into the cost specified by WHERE, and returns the cost added.
Statements in an inner loop relative to the loop being vectorized are weighted more heavily. The value here is arbitrary and could potentially be improved with analysis.
enum machine_mode default_addr_space_address_mode | ( | addr_space_t | ) |
The default hook for TARGET_ADDR_SPACE_CONVERT. This hook should never be called for targets with only a generic address space.
bool default_addr_space_legitimate_address_p | ( | enum machine_mode | mode, |
rtx | mem, | ||
bool | strict, | ||
addr_space_t | as | ||
) |
Named address space version of legitimate_address_p.
References warning().
rtx default_addr_space_legitimize_address | ( | rtx | x, |
rtx | oldx, | ||
enum machine_mode | mode, | ||
addr_space_t | as | ||
) |
Named address space version of LEGITIMIZE_ADDRESS.
enum machine_mode default_addr_space_pointer_mode | ( | addr_space_t | ) |
bool default_addr_space_subset_p | ( | addr_space_t | , |
addr_space_t | |||
) |
bool default_addr_space_valid_pointer_mode | ( | enum | machine_mode, |
addr_space_t | |||
) |
void default_asm_output_ident_directive | ( | const char * | ) |
unsigned int default_autovectorize_vector_sizes | ( | void | ) |
By default only the size derived from the preferred vector mode is tried.
References vect_body, vect_epilogue, and vect_prologue.
reg_class_t default_branch_target_register_class | ( | void | ) |
tree default_builtin_chkp_function | ( | unsigned | int | ) |
tree default_builtin_reciprocal | ( | unsigned int | fn, |
bool | md_fn, | ||
bool | sqrt | ||
) |
Reciprocal.
rtx default_builtin_setjmp_frame_value | ( | void | ) |
The default implementation of TARGET_BUILTIN_SETJMP_FRAME_VALUE.
bool default_builtin_support_vector_misalignment | ( | enum machine_mode | mode, |
const_tree | type, | ||
int | misalignment, | ||
bool | is_packed | ||
) |
By default, assume that a target supports any factor of misalignment memory access if it supports movmisalign patten. is_packed is true if the memory access is defined in a packed struct.
References default_builtin_vectorization_cost(), stmt_cost(), stmt_in_inner_loop_p(), stmt_vectype(), and vect_body.
bool default_builtin_vector_alignment_reachable | ( | const_tree | , |
bool | |||
) |
int default_builtin_vectorization_cost | ( | enum vect_cost_for_stmt | type_of_cost, |
tree | vectype, | ||
int | misalign | ||
) |
Default vectorizer cost model values.
Referenced by default_builtin_support_vector_misalignment().
Vectorized conversion.
Mapping of builtin functions to vectorized variants.
References cond_branch_not_taken, scalar_load, scalar_stmt, scalar_store, scalar_to_vec, vec_perm, vec_to_scalar, vector_load, vector_stmt, and vector_store.
unsigned int default_case_values_threshold | ( | void | ) |
If the machine does not have a case insn that compares the bounds, this means extra overhead for dispatch tables, which raises the threshold for using them.
enum machine_mode default_cc_modes_compatible | ( | enum | machine_mode, |
enum | machine_mode | ||
) |
enum machine_mode default_chkp_bound_mode | ( | void | ) |
tree default_chkp_bound_type | ( | void | ) |
bool default_class_likely_spilled_p | ( | reg_class_t | ) |
unsigned char default_class_max_nregs | ( | reg_class_t | rclass, |
enum machine_mode | mode | ||
) |
The default implementation of TARGET_CLASS_MAX_NREGS.
References memcpy(), target_flags, and targetm.
enum machine_mode default_cstore_mode | ( | enum | insn_code | ) |
tree default_cxx_guard_type | ( | void | ) |
The generic C++ ABI specifies this is a 64-bit value.
References size_in_bytes().
enum unwind_info_type default_debug_unwind_info | ( | void | ) |
Determine the debugging unwind mechanism for the target.
If the target wants to force the use of dwarf2 unwind info, let it.
??? Change all users to the hook, then poison this.
Otherwise, only turn it on if dwarf2 debugging is enabled.
bool default_decimal_float_supported_p | ( | void | ) |
True if the target supports decimal floating point.
void default_destroy_cost_data | ( | void * | ) |
bool default_different_addr_displacement_p | ( | void | ) |
References insn_data, and n_operands.
enum machine_mode default_eh_return_filter_mode | ( | void | ) |
References word_mode.
rtx default_expand_builtin_saveregs | ( | void | ) |
void default_external_libcall | ( | rtx | ) |
tree default_external_stack_protect_fail | ( | void | ) |
void default_finish_cost | ( | void * | data, |
unsigned * | prologue_cost, | ||
unsigned * | body_cost, | ||
unsigned * | epilogue_cost | ||
) |
By default, the cost model just returns the accumulated costs.
bool default_fixed_point_supported_p | ( | void | ) |
True if the target supports fixed-point arithmetic.
References computed_jump_p(), and tablejump_p().
rtx default_function_arg | ( | cumulative_args_t | , |
enum | machine_mode, | ||
const_tree | , | ||
bool | |||
) |
void default_function_arg_advance | ( | cumulative_args_t | , |
enum | machine_mode, | ||
const_tree | , | ||
bool | |||
) |
unsigned int default_function_arg_boundary | ( | enum | machine_mode, |
const_tree | |||
) |
References stack_chk_guard_decl.
unsigned int default_function_arg_round_boundary | ( | enum | machine_mode, |
const_tree | |||
) |
References get_identifier().
rtx default_function_incoming_arg | ( | cumulative_args_t | , |
enum | machine_mode, | ||
const_tree | , | ||
bool | |||
) |
section* default_function_section | ( | tree | decl, |
enum node_frequency | freq, | ||
bool | startup, | ||
bool | exit | ||
) |
Choose named function section based on its frequency.
Old GNU linkers have buggy --gc-section support, which sometimes results in .gcc_except_table* sections being garbage collected.
Startup code should go to startup subsection unless it is unlikely executed (this happens especially with function splitting where we can split away unnecessary parts of static constructors.
Similarly for exit.
Group cold functions together, similarly for hot code.
References cgraph_get_node(), get_named_section(), hot_function_section(), NODE_FREQUENCY_NORMAL, NODE_FREQUENCY_UNLIKELY_EXECUTED, cgraph_node::only_called_at_exit, cgraph_node::only_called_at_startup, and targetm.
rtx default_function_value | ( | const_tree | , |
const_tree | , | ||
bool | |||
) |
The old interface doesn't handle receiving the function type.
bool default_function_value_regno_p | ( | const unsigned | int | ) |
void* default_get_pch_validity | ( | size_t * | ) |
enum machine_mode default_get_reg_raw_mode | ( | int | ) |
bool default_hard_regno_scratch_ok | ( | unsigned | int | ) |
bool default_has_ifunc_p | ( | void | ) |
True if the target supports GNU indirect functions.
bool default_have_conditional_execution | ( | void | ) |
tree default_hidden_stack_protect_fail | ( | void | ) |
void* default_init_cost | ( | struct loop * | ) |
rtx default_internal_arg_pointer | ( | void | ) |
If the reg that the virtual arg pointer will be translated into is not a fixed reg or is the stack pointer, make a copy of the virtual arg pointer, and address parms via the copy. The frame pointer is considered fixed even though it is not marked as such.
const char* default_invalid_within_doloop | ( | const_rtx | ) |
int default_jump_align_max_skip | ( | rtx | ) |
int default_label_align_after_barrier_max_skip | ( | rtx | ) |
int default_label_align_max_skip | ( | rtx | ) |
bool default_legitimate_address_p | ( | enum machine_mode | mode, |
rtx | addr, | ||
bool | strict | ||
) |
@verbatim
Default target hook functions. Copyright (C) 2003-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/.
@verbatim
Default target hook functions. Copyright (C) 2003-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/.
The migration of target macros to target hooks works as follows: 1. Create a target hook that uses the existing target macros to implement the same functionality. 2. Convert all the MI files to use the hook instead of the macro. 3. Repeat for a majority of the remaining target macros. This will take some time. 4. Tell target maintainers to start migrating. 5. Eventually convert the backends to override the hook instead of defining the macros. This will take some time too. 6. TBD when, poison the macros. Unmigrated targets will break at this point. Note that we expect steps 1-3 to be done by the people that understand what the MI does with each macro, and step 5 to be done by the target maintainers for their respective targets. Note that steps 1 and 2 don't have to be done together, but no target can override the new hook until step 2 is complete for it. Once the macros are poisoned, we will revert to the old migration rules - migrate the macro, callers, and targets all at once. This comment can thus be removed at that point.
Defer to the old implementation using a goto.
bool default_libc_has_function | ( | enum | function_class | ) |
enum machine_mode default_libgcc_cmp_return_mode | ( | void | ) |
References word_mode.
enum machine_mode default_libgcc_shift_count_mode | ( | void | ) |
References word_mode.
int default_loop_align_max_skip | ( | rtx | ) |
bool default_lra_p | ( | void | ) |
tree default_mangle_assembler_name | ( | const char * | ) |
By default, do no modification.
References optab_handler().
bool default_member_type_forces_blk | ( | const_tree | , |
enum | machine_mode | ||
) |
int default_memory_move_cost | ( | enum machine_mode | mode, |
reg_class_t | rclass, | ||
bool | in | ||
) |
Compute cost of moving registers to/from memory.
unsigned int default_min_divisions_for_recip_mul | ( | enum | machine_mode | ) |
bool default_mode_dependent_address_p | ( | const_rtx | addr, |
addr_space_t | addrspace | ||
) |
The default implementation of TARGET_MODE_DEPENDENT_ADDRESS_P.
enum machine_mode default_mode_for_suffix | ( | char | ) |
int default_mode_rep_extended | ( | enum machine_mode | mode, |
enum machine_mode | mode_rep | ||
) |
The default implementation of TARGET_MODE_REP_EXTENDED.
const char* default_pch_valid_p | ( | const void * | , |
size_t | |||
) |
reg_class_t default_preferred_output_reload_class | ( | rtx | x, |
reg_class_t | rclass | ||
) |
The default implementation of TARGET_OUTPUT_PREFERRED_RELOAD_CLASS.
References targetm.
reg_class_t default_preferred_reload_class | ( | rtx | x, |
reg_class_t | rclass | ||
) |
The default implementation of TARGET_PREFERRED_RELOAD_CLASS.
reg_class_t default_preferred_rename_class | ( | reg_class_t | rclass | ) |
enum machine_mode default_preferred_simd_mode | ( | enum machine_mode | mode | ) |
bool default_pretend_outgoing_varargs_named | ( | cumulative_args_t | ) |
void default_print_operand | ( | FILE * | stream, |
rtx | x, | ||
int | code | ||
) |
Emit to STREAM the assembler syntax for insn operand X.
void default_print_operand_address | ( | FILE * | stream, |
rtx | x | ||
) |
Emit to STREAM the assembler syntax for an insn operand whose memory address is X.
bool default_print_operand_punct_valid_p | ( | unsigned | char | ) |
bool default_profile_before_prologue | ( | void | ) |
enum machine_mode default_promote_function_mode | ( | const_tree | , |
enum | machine_mode, | ||
int * | , | ||
const_tree | , | ||
int | |||
) |
References promote_mode().
enum machine_mode default_promote_function_mode_always_promote | ( | const_tree | , |
enum | machine_mode, | ||
int * | , | ||
const_tree | , | ||
int | |||
) |
References promote_mode().
bool default_ref_may_alias_errno | ( | struct ao_ref_s * | ) |
int default_register_move_cost | ( | enum machine_mode | mode, |
reg_class_t | from, | ||
reg_class_t | to | ||
) |
Compute cost of moving data from a register of class FROM to one of TO, using MODE.
References UI_DWARF2.
int default_register_priority | ( | int | ) |
bool default_register_usage_leveling_p | ( | void | ) |
int default_reloc_rw_mask | ( | void | ) |
By default, if flag_pic is true, then neither local nor global relocs should be placed in readonly memory.
bool default_return_in_memory | ( | const_tree | , |
const_tree | |||
) |
bool default_scalar_mode_supported_p | ( | enum | machine_mode | ) |
reg_class_t default_secondary_reload | ( | bool | , |
rtx | , | ||
reg_class_t | , | ||
enum | machine_mode, | ||
secondary_reload_info * | |||
) |
The scratch register's constraint must start with "=&", except for an input reload, where only "=" is necessary, and where it might be beneficial to re-use registers from the input.
References insn_data.
void default_setup_incoming_varargs | ( | cumulative_args_t | , |
enum | machine_mode, | ||
tree | , | ||
int * | , | ||
int | |||
) |
Referenced by hook_bool_CUMULATIVE_ARGS_false().
unsigned HOST_WIDE_INT default_shift_truncation_mask | ( | enum | machine_mode | ) |
tree default_stack_protect_guard | ( | void | ) |
Do not share RTL as the declaration is visible outside of current function.
References build_call_expr(), build_function_type_list(), get_identifier(), stack_chk_fail_decl, and VISIBILITY_DEFAULT.
rtx default_static_chain | ( | const_tree | , |
bool | |||
) |
References build_variant_type_copy().
void default_target_option_override | ( | void | ) |
int default_unspec_may_trap_p | ( | const_rtx | , |
unsigned | |||
) |
enum machine_mode default_unwind_word_mode | ( | void | ) |
bool default_valid_pointer_mode | ( | enum | machine_mode | ) |
HOST_WIDE_INT default_vector_alignment | ( | const_tree | ) |
bool gnu_libc_has_function | ( | enum | function_class | ) |
bool hook_bool_const_rtx_commutative_p | ( | const_rtx | , |
int | |||
) |
bool hook_bool_CUMULATIVE_ARGS_false | ( | cumulative_args_t | ) |
These are here, and not in hooks.[ch], because not all users of hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS.
bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false | ( | cumulative_args_t | , |
enum | machine_mode, | ||
const_tree | , | ||
bool | |||
) |
bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true | ( | cumulative_args_t | , |
enum | machine_mode, | ||
const_tree | , | ||
bool | |||
) |
bool hook_bool_CUMULATIVE_ARGS_true | ( | cumulative_args_t | ) |
bool hook_callee_copies_named | ( | cumulative_args_t | ca, |
enum machine_mode | mode, | ||
const_tree | type, | ||
bool | named | ||
) |
Return true if a parameter follows callee copies conventions. This version of the hook is true for all named arguments.
int hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 | ( | cumulative_args_t | , |
enum | machine_mode, | ||
tree | , | ||
bool | |||
) |
const char* hook_invalid_arg_for_unprototyped_fn | ( | const_tree | , |
const_tree | , | ||
const_tree | |||
) |
bool hook_pass_by_reference_must_pass_in_stack | ( | cumulative_args_t | c, |
enum machine_mode | mode, | ||
const_tree | type, | ||
bool | named_arg | ||
) |
Return true if a parameter must be passed by reference. This version of the TARGET_PASS_BY_REFERENCE hook uses just MUST_PASS_IN_STACK.
void hook_void_bitmap | ( | bitmap | ) |
bool no_c99_libc_has_function | ( | enum | function_class | ) |
tree std_gimplify_va_arg_expr | ( | tree | valist, |
tree | type, | ||
gimple_seq * | pre_p, | ||
gimple_seq * | post_p | ||
) |
The "standard" implementation of va_arg: read the value from the current (padded) address and increment by the (padded) size.
All of the alignment and movement below is for args-grow-up machines. As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all implement their own specialized gimplify_va_arg_expr routines.
When we align parameter on stack for caller, if the parameter alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee here with caller.
Hoist the valist value into a temporary for the moment.
va_list pointer is aligned to PARM_BOUNDARY. If argument actually requires greater alignment, we must perform dynamic alignment.
If the actual alignment is less than the alignment of the type, adjust the type accordingly so that we don't assume strict alignment when dereferencing the pointer.
Compute the rounded size of the type.
Reduce rounded_size so it's sharable with the postqueue.
Get AP.
Small args are padded downward.
Compute new value for AP.
bool targhook_float_words_big_endian | ( | void | ) |
bool targhook_words_big_endian | ( | void | ) |
Make some target macros useable by target-independent code.