GCC Middle and Back End API Reference
_bb_vec_info Class Reference

#include <tree-vectorizer.h>

Inheritance diagram for _bb_vec_info:
Collaboration diagram for _bb_vec_info:

Public Types

enum  vec_kind { bb , loop }
 
typedef hash_set< int_hash< machine_mode, E_VOIDmode, E_BLKmode > > mode_set
 

Public Member Functions

 _bb_vec_info (vec< basic_block > bbs, vec_info_shared *)
 
 ~_bb_vec_info ()
 
stmt_vec_info add_stmt (gimple *)
 
stmt_vec_info add_pattern_stmt (gimple *, stmt_vec_info)
 
stmt_vec_info resync_stmt_addr (gimple *)
 
stmt_vec_info lookup_stmt (gimple *)
 
stmt_vec_info lookup_def (tree)
 
stmt_vec_info lookup_single_use (tree)
 
class dr_vec_infolookup_dr (data_reference *)
 
void move_dr (stmt_vec_info, stmt_vec_info)
 
void remove_stmt (stmt_vec_info)
 
void replace_stmt (gimple_stmt_iterator *, stmt_vec_info, gimple *)
 
void insert_on_entry (stmt_vec_info, gimple *)
 
void insert_seq_on_entry (stmt_vec_info, gimple_seq)
 

Data Fields

vec< slp_rootroots
 
vec_kind kind
 
vec_info_sharedshared
 
vec< stmt_vec_infostmt_vec_infos
 
bool stmt_vec_info_ro
 
bool any_known_not_updated_vssa
 
auto_vec< slp_instanceslp_instances
 
vec_base_alignments base_alignments
 
auto_vec< stmt_vec_infogrouped_stores
 
mode_set used_vector_modes
 
machine_mode vector_mode
 
basic_blockbbs
 
unsigned int nbbs
 
gimple_seq inv_pattern_def_seq
 

Private Member Functions

stmt_vec_info new_stmt_vec_info (gimple *stmt)
 
void set_vinfo_for_stmt (gimple *, stmt_vec_info, bool=true)
 
void free_stmt_vec_infos ()
 
void free_stmt_vec_info (stmt_vec_info)
 

Member Typedef Documentation

◆ mode_set

hash_set<int_hash<machine_mode, E_VOIDmode, E_BLKmode> > vec_info::mode_set
inherited

Member Enumeration Documentation

◆ vec_kind

enum vec_info::vec_kind
inherited
Enumerator
bb 
loop 

Constructor & Destructor Documentation

◆ _bb_vec_info()

_bb_vec_info::_bb_vec_info ( vec< basic_block > _bbs,
vec_info_shared * shared )
Initialize a bb_vec_info struct for the statements in BBS basic blocks.   

References vec_info::add_stmt(), vec_info::bbs, gimple_set_uid(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_start_phis(), gsi_stmt(), i, is_gimple_debug(), vec_info::nbbs, and si.

◆ ~_bb_vec_info()

_bb_vec_info::~_bb_vec_info ( )
Free BB_VINFO struct, as well as all the stmt_vec_info structs of all the
stmts in the basic block.   

References vec_info::bbs, gimple_set_uid(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_start_phis(), gsi_stmt(), i, vec_info::nbbs, roots, and si.

Member Function Documentation

◆ add_pattern_stmt()

stmt_vec_info vec_info::add_pattern_stmt ( gimple * stmt,
stmt_vec_info stmt_info )
inherited
Record that STMT belongs to the vectorizable region.  Create a new
stmt_vec_info and mark VECINFO as being related and return the new
stmt_vec_info.   

References vec_info::new_stmt_vec_info(), vec_info::set_vinfo_for_stmt(), and STMT_VINFO_RELATED_STMT.

Referenced by addsub_pattern::build(), and complex_pattern::build().

◆ add_stmt()

◆ free_stmt_vec_info()

void vec_info::free_stmt_vec_info ( stmt_vec_info stmt_info)
privateinherited

◆ free_stmt_vec_infos()

void vec_info::free_stmt_vec_infos ( void )
privateinherited
Free the contents of stmt_vec_infos.   

References vec_info::free_stmt_vec_info(), NULL, and vec_info::stmt_vec_infos.

Referenced by vec_info::~vec_info().

◆ insert_on_entry()

void vec_info::insert_on_entry ( stmt_vec_info context,
gimple * new_stmt )
inherited
Like insert_seq_on_entry but just inserts the single stmt NEW_STMT.   

References gsi_insert_before_without_update(), GSI_SAME_STMT, gsi_start(), vec_info::insert_seq_on_entry(), and NULL.

Referenced by vect_init_vector_1().

◆ insert_seq_on_entry()

void vec_info::insert_seq_on_entry ( stmt_vec_info context,
gimple_seq seq )
inherited
Insert stmts in SEQ on the VEC_INFO region entry.  If CONTEXT is
not NULL it specifies whether to use the sub-region entry
determined by it, currently used for loop vectorization to insert
on the inner loop entry vs. the outer loop entry.   

References vec_info::bbs, dyn_cast(), gcc_assert, gsi_after_labels(), gsi_insert_seq_before(), gsi_insert_seq_on_edge_immediate(), GSI_SAME_STMT, loop::inner, loop_preheader_edge(), LOOP_VINFO_LOOP, and nested_in_vect_loop_p().

Referenced by vec_info::insert_on_entry(), vect_create_constant_vectors(), and vect_slp_region().

◆ lookup_def()

◆ lookup_dr()

◆ lookup_single_use()

stmt_vec_info vec_info::lookup_single_use ( tree lhs)
inherited
See whether there is a single non-debug statement that uses LHS and
whether that statement has an associated stmt_vec_info.  Return the
stmt_vec_info if so, otherwise return null.   

References vec_info::lookup_stmt(), NULL, and single_imm_use().

◆ lookup_stmt()

stmt_vec_info vec_info::lookup_stmt ( gimple * stmt)
inherited
If STMT has an associated stmt_vec_info, return that vec_info, otherwise
return null.  It is safe to call this function on any statement, even if
it might not be part of the vectorizable region.   

References gimple_uid(), NULL, and vec_info::stmt_vec_infos.

Referenced by check_scan_store(), gather_scalar_reductions(), vec_info::lookup_def(), vec_info::lookup_dr(), vec_info::lookup_single_use(), maybe_push_to_hybrid_worklist(), maybe_set_vectorized_backedge_value(), move_early_exit_stmts(), vec_slp_has_scalar_use(), vect_analyze_data_refs(), vect_analyze_early_break_dependences(), vect_analyze_loop_2(), vect_analyze_loop_operations(), vect_analyze_scalar_cycles_1(), vect_analyze_slp(), vect_analyze_stmt(), vect_bb_slp_mark_live_stmts(), vect_bb_slp_scalar_cost(), vect_build_slp_instance(), vect_build_slp_tree_2(), vect_can_advance_ivs_p(), vect_compute_single_scalar_iteration_cost(), vect_create_loop_vinfo(), vect_detect_hybrid_slp(), vect_determine_min_output_precision_1(), vect_determine_precisions(), vect_determine_vectorization_factor(), vect_determine_vf_for_stmt(), vect_dissolve_slp_only_groups(), vect_init_pattern_stmt(), vect_mark_pattern_stmts(), vect_mark_stmts_to_be_vectorized(), vect_pattern_recog(), vect_pattern_recog_1(), vect_set_loop_condition(), vect_slp_analyze_load_dependences(), vect_slp_analyze_store_dependences(), vect_slp_check_for_roots(), vect_transform_loop(), vect_update_ivs_after_vectorizer(), vect_update_vf_for_slp(), vectorizable_induction(), vectorizable_live_operation(), vectorizable_reduction(), and vectorizable_scan_store().

◆ move_dr()

void vec_info::move_dr ( stmt_vec_info new_stmt_info,
stmt_vec_info old_stmt_info )
inherited

◆ new_stmt_vec_info()

◆ remove_stmt()

void vec_info::remove_stmt ( stmt_vec_info stmt_info)
inherited

◆ replace_stmt()

void vec_info::replace_stmt ( gimple_stmt_iterator * gsi,
stmt_vec_info stmt_info,
gimple * new_stmt )
inherited
Replace the statement at GSI by NEW_STMT, both the vectorization
information and the function itself.  STMT_INFO describes the statement
at GSI.   

References gcc_assert, gimple_set_uid(), gimple_uid(), gsi_replace(), and gsi_stmt().

Referenced by vect_remove_slp_scalar_calls(), vectorizable_call(), and vectorizable_simd_clone_call().

◆ resync_stmt_addr()

stmt_vec_info vec_info::resync_stmt_addr ( gimple * stmt)
inherited
If STMT was previously associated with a stmt_vec_info and STMT now resides
at a different address than before (e.g., because STMT is a phi node that has
been resized), update the stored address to match the new one.  It is not
possible to use lookup_stmt () to perform this task, because that function
returns NULL if the stored stmt pointer does not match the one being looked
up.   

References gimple_uid(), and vec_info::stmt_vec_infos.

Referenced by vect_loop_versioning().

◆ set_vinfo_for_stmt()

void vec_info::set_vinfo_for_stmt ( gimple * stmt,
stmt_vec_info info,
bool check_ro = true )
privateinherited

Field Documentation

◆ any_known_not_updated_vssa

bool vec_info::any_known_not_updated_vssa
inherited

◆ base_alignments

vec_base_alignments vec_info::base_alignments
inherited

◆ bbs

◆ grouped_stores

◆ inv_pattern_def_seq

gimple_seq vec_info::inv_pattern_def_seq
inherited

◆ kind

vec_kind vec_info::kind
inherited

◆ nbbs

◆ roots

◆ shared

◆ slp_instances

◆ stmt_vec_info_ro

bool vec_info::stmt_vec_info_ro
inherited

◆ stmt_vec_infos

◆ used_vector_modes

mode_set vec_info::used_vector_modes
inherited

◆ vector_mode


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