GCC Middle and Back End API Reference
|
Public Member Functions | |
compare_by_pieces_d (rtx op0, rtx op1, by_pieces_constfn op1_cfn, void *op1_cfn_data, HOST_WIDE_INT len, int align, rtx_code_label *fail_label) | |
void | run () |
Protected Attributes | |
pieces_addr | m_to |
pieces_addr | m_from |
const unsigned HOST_WIDE_INT | m_len |
HOST_WIDE_INT | m_offset |
unsigned int | m_align |
unsigned int | m_max_size |
bool | m_reverse |
bool | m_push |
bool | m_overlap_op_by_pieces |
by_pieces_operation | m_op |
Private Member Functions | |
void | generate (rtx, rtx, machine_mode) final override |
bool | prepare_mode (machine_mode, unsigned int) final override |
void | finish_mode (machine_mode) final override |
fixed_size_mode | get_usable_mode (fixed_size_mode, unsigned int) |
fixed_size_mode | smallest_fixed_size_mode_for_size (unsigned int) |
Private Attributes | |
rtx_code_label * | m_fail_label |
rtx | m_accumulator |
int | m_count |
int | m_batch |
Context used by compare_by_pieces_genfn. It stores the fail label to jump to in case of miscomparison, and for branch ratios greater than 1, it stores an accumulator and the current and maximum counts before emitting another branch.
|
inline |
References fail_label, and m_fail_label.
|
finaloverrideprivatevirtual |
Called after expanding a series of comparisons in MODE. If we have accumulated results for which we haven't emitted a branch yet, do so now.
Reimplemented from op_by_pieces_d.
References const0_rtx, do_compare_rtx_and_jump(), m_accumulator, m_fail_label, NULL, NULL_RTX, and profile_probability::uninitialized().
|
finaloverrideprivatevirtual |
A callback used when iterating for a compare_by_pieces_operation. OP0 and OP1 are the values that have been loaded and should be compared in MODE. DATA holds a pointer to the compare_by_pieces_data context structure.
Implements op_by_pieces_d.
References const0_rtx, do_compare_rtx_and_jump(), expand_binop(), m_accumulator, m_batch, m_count, m_fail_label, NULL, NULL_RTX, OPTAB_LIB_WIDEN, and profile_probability::uninitialized().
|
privateinherited |
This function returns the largest usable integer mode for LEN bytes whose size is no bigger than size of MODE.
References GET_MODE_SIZE(), op_by_pieces_d::m_align, op_by_pieces_d::m_op, op_by_pieces_d::prepare_mode(), and widest_fixed_size_mode_for_size().
Referenced by op_by_pieces_d::run().
|
finaloverrideprivatevirtual |
Return true if MODE can be used for a set of moves and comparisons, given an alignment ALIGN. Prepare whatever data is necessary for later calls to generate.
Implements op_by_pieces_d.
References can_compare_p(), ccp_jump, GET_MODE_ALIGNMENT, m_accumulator, m_batch, m_count, NULL_RTX, optab_handler(), and targetm.
|
inherited |
This function contains the main loop used for expanding a block operation. First move what we can in the largest integer mode, then go to successively smaller modes. For every access, call GENFUN with the two operands and the EXTRA_DATA.
References pieces_addr::adjust(), by_pieces_prev::data, op_by_pieces_d::finish_mode(), generate(), GET_MODE_SIZE(), op_by_pieces_d::get_usable_mode(), op_by_pieces_d::m_from, op_by_pieces_d::m_len, op_by_pieces_d::m_max_size, op_by_pieces_d::m_offset, op_by_pieces_d::m_op, op_by_pieces_d::m_overlap_op_by_pieces, op_by_pieces_d::m_push, op_by_pieces_d::m_reverse, op_by_pieces_d::m_to, pieces_addr::maybe_postinc(), pieces_addr::maybe_predec(), by_pieces_prev::mode, NULL_RTX, op_by_pieces_d::smallest_fixed_size_mode_for_size(), and widest_fixed_size_mode_for_size().
|
privateinherited |
Return the smallest integer or QI vector mode that is not narrower than SIZE bytes.
References by_pieces_mode_supported_p(), can_use_qi_vectors(), candidate(), FOR_EACH_MODE_IN_CLASS, GET_MODE_INNER, GET_MODE_SIZE(), is_a(), op_by_pieces_d::m_len, op_by_pieces_d::m_op, opt_mode< T >::require(), and smallest_int_mode_for_size().
Referenced by op_by_pieces_d::run().
|
private |
Referenced by finish_mode(), generate(), and prepare_mode().
|
protectedinherited |
Referenced by op_by_pieces_d::get_usable_mode(), and op_by_pieces_d::op_by_pieces_d().
|
private |
Referenced by generate(), and prepare_mode().
|
private |
Referenced by generate(), and prepare_mode().
|
private |
Referenced by compare_by_pieces_d(), finish_mode(), and generate().
|
protectedinherited |
Referenced by op_by_pieces_d::op_by_pieces_d(), and op_by_pieces_d::run().
|
protectedinherited |
Referenced by op_by_pieces_d::run(), and op_by_pieces_d::smallest_fixed_size_mode_for_size().
|
protectedinherited |
Referenced by op_by_pieces_d::op_by_pieces_d(), and op_by_pieces_d::run().
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
Referenced by op_by_pieces_d::op_by_pieces_d(), and op_by_pieces_d::run().
|
protectedinherited |
Referenced by op_by_pieces_d::run().
|
protectedinherited |
|
protectedinherited |