../../src/test.cc

Line Hotness Pass Source Function / Inlining Chain
1
#include <vector>
2
std::size_t f(std::vector<std::vector<float>> const & v) {
3
	std::size_t ret = 0;
4
	for (auto const & w: v)
100.00 ldist
                      ^Loop 1 not distributed.
                      
  • std::size_t f(const std::vector<std::vector<float> >&)
100.00 vect

                        
^=== analyzing loop === Analyzing loop at ../../src/test.cc:4 === analyze_loop_nest === === vect_analyze_loop_form === === get_loop_niters === Symbolic number of iterations is (((((unsigned long) _10 - (unsigned long) _9) - 24) /[ex] 8) * 768614336404564651 & 2305843009213693951) + 1 === vect_analyze_data_refs === got vectype for stmt: _7 = MEM[(float * *)SR.8_23];vector(2) long unsigned int got vectype for stmt: _8 = MEM[(float * *)SR.8_23 + 8B];vector(2) long unsigned int === vect_analyze_scalar_cycles === Analyze phi: ret_17 = PHI <0(5), ret_6(6)> Access function of PHI: {0, +, _16}_1 step: _16, init: 0 step unknown. Analyze phi: SR.8_23 = PHI <_9(5), _12(6)> Access function of PHI: {_9, +, 24}_1 step: 24, init: _9 Detected induction. Analyze phi: ret_17 = PHI <0(5), ret_6(6)> detected reduction: ret_6 = _16 + ret_17; Detected reduction. === vect_pattern_recog === vect_is_simple_use: operand _16 def_stmt: _16 = (long unsigned int) _15; type of def: internal vect_is_simple_use: operand _16 def_stmt: _16 = (long unsigned int) _15; type of def: internal vect_is_simple_use: operand _15 def_stmt: _15 = _14 /[ex] 4; type of def: internal vect_is_simple_use: operand _16 def_stmt: _16 = (long unsigned int) _15; type of def: internal === vect_analyze_data_ref_accesses === Detected interleaving load MEM[(float * *)SR.8_23] and MEM[(float * *)SR.8_23 + 8B] Detected interleaving load of size 3 starting with _7 = MEM[(float * *)SR.8_23]; There is a gap of 1 elements after the group === vect_mark_stmts_to_be_vectorized === init: phi relevant? ret_17 = PHI <0(5), ret_6(6)> init: phi relevant? SR.8_23 = PHI <_9(5), _12(6)> init: stmt relevant? _7 = MEM[(float * *)SR.8_23]; init: stmt relevant? _8 = MEM[(float * *)SR.8_23 + 8B]; init: stmt relevant? _14 = _8 - _7; init: stmt relevant? _15 = _14 /[ex] 4; init: stmt relevant? _16 = (long unsigned int) _15; init: stmt relevant? ret_6 = _16 + ret_17; vec_stmt_relevant_p: used out of loop. vect_is_simple_use: operand _16 def_stmt: _16 = (long unsigned int) _15; type of def: internal vec_stmt_relevant_p: stmt live but not relevant. mark relevant 1, live 1: ret_6 = _16 + ret_17; init: stmt relevant? _12 = SR.8_23 + 24; init: stmt relevant? if (_10 != _12) worklist: examine stmt: ret_6 = _16 + ret_17; vect_is_simple_use: operand _16 def_stmt: _16 = (long unsigned int) _15; type of def: internal mark relevant 1, live 0: _16 = (long unsigned int) _15; vect_is_simple_use: operand ret_17 def_stmt: ret_17 = PHI <0(5), ret_6(6)> type of def: reduction mark relevant 1, live 0: ret_17 = PHI <0(5), ret_6(6)> worklist: examine stmt: ret_17 = PHI <0(5), ret_6(6)> vect_is_simple_use: operand 0 vect_is_simple_use: operand ret_6 def_stmt: ret_6 = _16 + ret_17; type of def: reduction reduc-stmt defining reduc-phi in the same nest. worklist: examine stmt: _16 = (long unsigned int) _15; vect_is_simple_use: operand _15 def_stmt: _15 = _14 /[ex] 4; type of def: internal mark relevant 1, live 0: _15 = _14 /[ex] 4; worklist: examine stmt: _15 = _14 /[ex] 4; vect_is_simple_use: operand _14 def_stmt: _14 = _8 - _7; type of def: internal mark relevant 1, live 0: _14 = _8 - _7; worklist: examine stmt: _14 = _8 - _7; vect_is_simple_use: operand _8 def_stmt: _8 = MEM[(float * *)SR.8_23 + 8B]; type of def: internal mark relevant 1, live 0: _8 = MEM[(float * *)SR.8_23 + 8B]; vect_is_simple_use: operand _7 def_stmt: _7 = MEM[(float * *)SR.8_23]; type of def: internal mark relevant 1, live 0: _7 = MEM[(float * *)SR.8_23]; worklist: examine stmt: _7 = MEM[(float * *)SR.8_23]; worklist: examine stmt: _8 = MEM[(float * *)SR.8_23 + 8B]; === vect_analyze_data_ref_dependences === === vect_determine_vectorization_factor === ==> examining phi: ret_17 = PHI <0(5), ret_6(6)> get vectype for scalar type: size_t vectype: vector(2) long unsigned int nunits = 2 ==> examining phi: SR.8_23 = PHI <_9(5), _12(6)> ==> examining statement: _7 = MEM[(float * *)SR.8_23]; get vectype for scalar type: float * vectype: vector(2) long unsigned int nunits = 2 ==> examining statement: _8 = MEM[(float * *)SR.8_23 + 8B]; get vectype for scalar type: float * vectype: vector(2) long unsigned int nunits = 2 ==> examining statement: _14 = _8 - _7; get vectype for scalar type: long int vectype: vector(2) long int get vectype for scalar type: long int vectype: vector(2) long int nunits = 2 ==> examining statement: _15 = _14 /[ex] 4; get vectype for scalar type: long int vectype: vector(2) long int get vectype for scalar type: long int vectype: vector(2) long int nunits = 2 ==> examining statement: _16 = (long unsigned int) _15; get vectype for scalar type: long unsigned int vectype: vector(2) long unsigned int get vectype for scalar type: long unsigned int vectype: vector(2) long unsigned int nunits = 2 ==> examining statement: ret_6 = _16 + ret_17; get vectype for scalar type: size_t vectype: vector(2) long unsigned int get vectype for scalar type: size_t vectype: vector(2) long unsigned int nunits = 2 ==> examining statement: _12 = SR.8_23 + 24; skip. ==> examining statement: if (_10 != _12) skip. vectorization factor = 2 === vect_analyze_slp === === vect_make_slp_decision === === vect_analyze_data_refs_alignment === recording new base alignment for _9 alignment: 8 misalignment: 0 based on: _7 = MEM[(float * *)SR.8_23]; vect_compute_data_ref_alignment: can't force alignment of ref: MEM[(float * *)SR.8_23] vect_compute_data_ref_alignment: can't force alignment of ref: MEM[(float * *)SR.8_23 + 8B] === vect_prune_runtime_alias_test_list === === vect_enhance_data_refs_alignment === vector alignment may not be reachable vect_can_advance_ivs_p: Analyze phi: ret_17 = PHI <0(5), ret_6(6)> reduc or virtual phi. skip. Analyze phi: SR.8_23 = PHI <_9(5), _12(6)> Vectorizing an unaligned access. === vect_analyze_loop_operations === examining phi: ret_17 = PHI <0(5), ret_6(6)> examining phi: SR.8_23 = PHI <_9(5), _12(6)> ==> examining statement: _7 = MEM[(float * *)SR.8_23]; vect_is_simple_use: operand MEM[(float * *)SR.8_23] not ssa-name. use not simple. vect_is_simple_use: operand MEM[(float * *)SR.8_23] not ssa-name. use not simple. no array mode for V2DI[3] Data access with gaps requires scalar epilogue loop can't use a fully-masked loop because the target doesn't have the appropriate masked load or store. vect_model_load_cost: strided group_size = 3 . vect_model_load_cost: unaligned supported by hardware. vect_model_load_cost: inside_cost = 36, prologue_cost = 0 . ==> examining statement: _8 = MEM[(float * *)SR.8_23 + 8B]; vect_is_simple_use: operand MEM[(float * *)SR.8_23 + 8B] not ssa-name. use not simple. vect_is_simple_use: operand MEM[(float * *)SR.8_23 + 8B] not ssa-name. use not simple. no array mode for V2DI[3] Data access with gaps requires scalar epilogue loop vect_model_load_cost: unaligned supported by hardware. vect_model_load_cost: inside_cost = 12, prologue_cost = 0 . ==> examining statement: _14 = _8 - _7; vect_is_simple_use: operand _8 def_stmt: _8 = MEM[(float * *)SR.8_23 + 8B]; type of def: internal vect_is_simple_use: operand _7 def_stmt: _7 = MEM[(float * *)SR.8_23]; type of def: internal === vectorizable_operation === vect_model_simple_cost: inside_cost = 4, prologue_cost = 0 . ==> examining statement: _15 = _14 /[ex] 4; vect_is_simple_use: operand _14 def_stmt: _14 = _8 - _7; type of def: internal vect_is_simple_use: operand 4 op not supported by target. not vectorized: relevant stmt not supported: _15 = _14 /[ex] 4; bad operation or unsupported loop bound.
  • std::size_t f(const std::vector<std::vector<float> >&)
5
		ret += w.size();
6
	return ret;
7
}