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

Public Member Functions

void build (vec_info *) final override

Static Public Member Functions

static internal_fn matches (complex_operation_t op, slp_tree_to_load_perm_map_t *, slp_compat_nodes_map_t *, slp_tree *, vec< slp_tree > *)
static vect_patternrecognize (slp_tree_to_load_perm_map_t *, slp_compat_nodes_map_t *, slp_tree *)
static vect_patternmkInstance (slp_tree *node, vec< slp_tree > *m_ops, internal_fn ifn)
static internal_fn matches (complex_operation_t op, slp_tree_to_load_perm_map_t *, slp_tree *, vec< slp_tree > *)

Protected Member Functions

 complex_add_pattern (slp_tree *node, vec< slp_tree > *m_ops, internal_fn ifn)
void build_common (vec_info *)

Protected Attributes

auto_vec< slp_treem_workset
stmt_vec_info m_rep
unsigned m_num_args
internal_fn m_ifn
slp_treem_node
vec< slp_treem_ops

Constructor & Destructor Documentation

◆ complex_add_pattern()

complex_add_pattern::complex_add_pattern ( slp_tree * node,
vec< slp_tree > * m_ops,
internal_fn ifn )
inlineprotected

Member Function Documentation

◆ build()

void complex_add_pattern::build ( vec_info * vinfo)
finaloverridevirtual
Perform a replacement of the detected complex add pattern with the new
instruction sequences.   

Implements vect_pattern.

References complex_pattern::build_common(), vect_pattern::m_node, vect_pattern::m_ops, SLP_TREE_CHILDREN, SLP_TREE_REF_COUNT, vect_build_swap_evenodd_node(), and vect_free_slp_tree().

◆ build_common()

void complex_pattern::build_common ( vec_info * vinfo)
protectedinherited
Create a replacement pattern statement for each node in m_node and inserts
  the new statement into m_node as the new representative statement.  The old
  statement is marked as being in a pattern defined by the new statement.  The
  statement is created as call to internal function IFN with m_num_args
  arguments.

  Furthermore the new pattern is also added to the vectorization information
  structure VINFO and the old statement STMT_INFO is marked as unused while
  the new statement is marked as used and the number of SLP uses of the new
  statement is incremented.

  The newly created SLP nodes are marked as SLP only and will be dissolved
  if SLP is aborted.

  The newly created gimple call is returned and the BB remains unchanged.

  This default method is designed to only match against simple operands where
  all the input and output types are the same.

References vec_info::add_pattern_stmt(), FOR_EACH_VEC_ELT, gimple_bb(), gimple_build_call_internal_vec(), gimple_call_set_lhs(), gimple_call_set_nothrow(), gimple_get_lhs(), gimple_location(), gimple_set_bb(), gimple_set_location(), i, vect_pattern::m_ifn, vect_pattern::m_num_args, m_rep, m_workset, make_temp_ssa_name(), NULL, pure_slp, SLP_TREE_CODE, SLP_TREE_LANE_PERMUTATION, SLP_TREE_REPRESENTATIVE, SLP_TREE_VECTYPE, STMT_SLP_TYPE, STMT_VINFO_RELEVANT, STMT_VINFO_STMT, STMT_VINFO_VECTYPE, TREE_TYPE, vect_orig_stmt(), and vect_used_in_scope.

Referenced by complex_add_pattern::build(), complex_fms_pattern::build(), and complex_mul_pattern::build().

◆ matches() [1/2]

internal_fn complex_add_pattern::matches ( complex_operation_t op,
slp_tree_to_load_perm_map_t * perm_cache,
slp_compat_nodes_map_t * ,
slp_tree * node,
vec< slp_tree > * ops )
static
Pattern matcher for trying to match complex addition pattern in SLP tree.

If no match is found then IFN is set to IFN_LAST.
This function matches the patterns shaped as:

c[i] = a[i] - b[i+1];
c[i+1] = a[i+1] + b[i];

If a match occurred then TRUE is returned, else FALSE.  The initial match is
expected to be in OP1 and the initial match operands in args0.   

References gcc_assert, linear_loads_p(), MINUS_PLUS, PERM_EVENODD, PERM_ODDEVEN, PLUS_MINUS, SLP_TREE_CHILDREN, and vect_pattern_validate_optab().

Referenced by recognize(), and complex_operations_pattern::recognize().

◆ matches() [2/2]

internal_fn complex_pattern::matches ( complex_operation_t op,
slp_tree_to_load_perm_map_t * ,
slp_tree * ,
vec< slp_tree > *  )
staticinherited

◆ mkInstance()

vect_pattern * complex_add_pattern::mkInstance ( slp_tree * node,
vec< slp_tree > * m_ops,
internal_fn ifn )
inlinestatic

◆ recognize()

vect_pattern * complex_add_pattern::recognize ( slp_tree_to_load_perm_map_t * perm_cache,
slp_compat_nodes_map_t * compat_cache,
slp_tree * node )
static
Attempt to recognize a complex add pattern.   

References complex_add_pattern(), matches(), NULL, and vect_detect_pair_op().

Field Documentation

◆ m_ifn

internal_fn vect_pattern::m_ifn
protectedinherited

◆ m_node

◆ m_num_args

◆ m_ops

◆ m_rep

stmt_vec_info complex_pattern::m_rep
protectedinherited

Referenced by build_common(), and complex_pattern().

◆ m_workset

auto_vec<slp_tree> complex_pattern::m_workset
protectedinherited

Referenced by build_common().


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