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)

Protected Attributes

auto_vec< slp_treem_workset
unsigned m_num_args
internal_fn m_ifn
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 )

References vect_pattern::m_num_args.

Referenced by mkInstance(), and recognize().

Member Function Documentation

◆ build()

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

Implements vect_pattern.

References complex_pattern::build(), 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().

◆ 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 )
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, IFN_LAST, 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]

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

◆ mkInstance()

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

◆ 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 )
Attempt to recognize a complex add pattern.   

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

Field Documentation

◆ m_ifn

internal_fn vect_pattern::m_ifn

◆ m_node

slp_tree* vect_pattern::m_node

◆ m_num_args

◆ m_ops

◆ m_workset

auto_vec<slp_tree> complex_pattern::m_workset

Referenced by complex_pattern::build().

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