GCC Middle and Back End API Reference
store_by_pieces_d Class Reference
Inheritance diagram for store_by_pieces_d:
Collaboration diagram for store_by_pieces_d:

Public Member Functions

 store_by_pieces_d (rtx to, by_pieces_constfn cfn, void *cfn_data, unsigned HOST_WIDE_INT len, unsigned int align, by_pieces_operation op)
 
rtx finish_retmode (memop_ret)
 
void run ()
 

Protected Member Functions

virtual void finish_mode (machine_mode)
 

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
 
fixed_size_mode get_usable_mode (fixed_size_mode, unsigned int)
 
fixed_size_mode smallest_fixed_size_mode_for_size (unsigned int)
 

Private Attributes

insn_gen_fn m_gen_fun
 

Detailed Description

Derived class from op_by_pieces_d, providing support for block move
operations.   

Constructor & Destructor Documentation

◆ store_by_pieces_d()

store_by_pieces_d::store_by_pieces_d ( rtx to,
by_pieces_constfn cfn,
void * cfn_data,
unsigned HOST_WIDE_INT len,
unsigned int align,
by_pieces_operation op )
inline

Member Function Documentation

◆ finish_mode()

virtual void op_by_pieces_d::finish_mode ( machine_mode )
inlineprotectedvirtualinherited

Reimplemented in compare_by_pieces_d.

Referenced by run().

◆ finish_retmode()

rtx store_by_pieces_d::finish_retmode ( memop_ret retmode)
Perform the final adjustment at the end of a string to obtain the
correct return value for the block operation.
Return value is based on RETMODE argument.   

References gcc_assert, op_by_pieces_d::m_offset, op_by_pieces_d::m_reverse, op_by_pieces_d::m_to, and RETURN_END_MINUS_ONE.

◆ generate()

void store_by_pieces_d::generate ( rtx op0,
rtx op1,
machine_mode  )
finaloverrideprivatevirtual
A callback used when iterating for a store_by_pieces_operation.
OP0 and OP1 are the values that have been loaded and should be
compared in MODE.  If OP0 is NULL, this means we should generate a
push; otherwise EXTRA_DATA holds a pointer to a pointer to the insn
gen function that should be used to generate the mode.   

Implements op_by_pieces_d.

References emit_insn(), and m_gen_fun.

◆ get_usable_mode()

fixed_size_mode op_by_pieces_d::get_usable_mode ( fixed_size_mode mode,
unsigned int len )
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(), m_align, m_op, prepare_mode(), and widest_fixed_size_mode_for_size().

Referenced by run().

◆ prepare_mode()

bool store_by_pieces_d::prepare_mode ( machine_mode mode,
unsigned int align )
finaloverrideprivatevirtual
Return true if MODE can be used for a set of stores, given an
alignment ALIGN.  Prepare whatever data is necessary for later
calls to generate.   

Implements op_by_pieces_d.

References GET_MODE_ALIGNMENT, m_gen_fun, and optab_handler().

◆ run()

void op_by_pieces_d::run ( )
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 by_pieces_prev::data, finish_mode(), generate(), GET_MODE_SIZE(), get_usable_mode(), m_from, m_len, m_max_size, m_offset, m_op, m_overlap_op_by_pieces, m_push, m_reverse, m_to, by_pieces_prev::mode, NULL_RTX, smallest_fixed_size_mode_for_size(), and widest_fixed_size_mode_for_size().

◆ smallest_fixed_size_mode_for_size()

fixed_size_mode op_by_pieces_d::smallest_fixed_size_mode_for_size ( unsigned int 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(), m_len, m_op, opt_mode< T >::require(), and smallest_int_mode_for_size().

Referenced by run().

Field Documentation

◆ m_align

unsigned int op_by_pieces_d::m_align
protectedinherited

Referenced by get_usable_mode(), and op_by_pieces_d().

◆ m_from

pieces_addr op_by_pieces_d::m_from
protectedinherited

Referenced by op_by_pieces_d(), and run().

◆ m_gen_fun

insn_gen_fn store_by_pieces_d::m_gen_fun
private

Referenced by generate(), and prepare_mode().

◆ m_len

const unsigned HOST_WIDE_INT op_by_pieces_d::m_len
protectedinherited

◆ m_max_size

unsigned int op_by_pieces_d::m_max_size
protectedinherited

Referenced by op_by_pieces_d(), and run().

◆ m_offset

HOST_WIDE_INT op_by_pieces_d::m_offset
protectedinherited

◆ m_op

by_pieces_operation op_by_pieces_d::m_op
protectedinherited

◆ m_overlap_op_by_pieces

bool op_by_pieces_d::m_overlap_op_by_pieces
protectedinherited

Referenced by op_by_pieces_d(), and run().

◆ m_push

bool op_by_pieces_d::m_push
protectedinherited

Referenced by op_by_pieces_d(), and run().

◆ m_reverse

bool op_by_pieces_d::m_reverse
protectedinherited

◆ m_to

pieces_addr op_by_pieces_d::m_to
protectedinherited

The documentation for this class was generated from the following file: