Lines Matching defs:dr_info
895 /* Return the misalignment of DR_INFO accessed in VECTYPE with OFFSET
899 dr_misalignment (dr_vec_info *dr_info, tree vectype, poly_int64 offset)
904 if (STMT_VINFO_GROUPED_ACCESS (dr_info->stmt))
907 = STMT_VINFO_DR_INFO (DR_GROUP_FIRST_ELEMENT (dr_info->stmt));
911 diff = (TREE_INT_CST_LOW (DR_INIT (dr_info->dr))
914 dr_info = first_dr;
917 int misalign = dr_info->misalignment;
924 if (maybe_lt (dr_info->target_alignment * BITS_PER_UNIT,
935 = dr_info->target_alignment.to_constant ();
982 dr_vec_info *dr_info = vinfo->lookup_dr (dr);
983 stmt_vec_info stmt_info = dr_info->stmt;
1001 Compute the misalignment of the data reference DR_INFO when vectorizing
1005 1. initialized misalignment info for DR_INFO
1011 vect_compute_data_ref_alignment (vec_info *vinfo, dr_vec_info *dr_info,
1014 stmt_vec_info stmt_info = dr_info->stmt;
1018 tree ref = DR_REF (dr_info->dr);
1028 SET_DR_MISALIGNMENT (dr_info, DR_MISALIGNMENT_UNKNOWN);
1033 innermost_loop_behavior *drb = vect_dr_behavior (vinfo, dr_info);
1039 SET_DR_TARGET_ALIGNMENT (dr_info, vector_alignment);
1073 = (DR_STEP_ALIGNMENT (dr_info->dr) % vect_align_c) == 0;
1095 = multiple_p (DR_STEP_ALIGNMENT (dr_info->dr) * vf, vect_align_c);
1115 || (entry->first->dr_aux.group <= dr_info->group)))))
1154 dr_info->base_decl = base;
1155 dr_info->base_misaligned = true;
1170 SET_DR_MISALIGNMENT (dr_info, const_misalignment);
1180 /* Return whether DR_INFO, which is related to DR_PEEL_INFO in
1185 vect_dr_aligned_if_related_peeled_dr_is (dr_vec_info *dr_info,
1189 DR_TARGET_ALIGNMENT (dr_info)))
1193 - wi::to_poly_offset (DR_INIT (dr_info->dr)));
1195 || multiple_p (diff, DR_TARGET_ALIGNMENT (dr_info)))
1201 /* Return whether DR_INFO is aligned if DR_PEEL_INFO is made
1205 vect_dr_aligned_if_peeled_dr_is (dr_vec_info *dr_info,
1208 if (!operand_equal_p (DR_BASE_ADDRESS (dr_info->dr),
1210 || !operand_equal_p (DR_OFFSET (dr_info->dr),
1212 || !operand_equal_p (DR_STEP (dr_info->dr),
1216 return vect_dr_aligned_if_related_peeled_dr_is (dr_info, dr_peel_info);
1219 /* Compute the value for dr_info->misalign so that the access appears
1224 vect_dr_misalign_for_aligned_access (dr_vec_info *dr_info)
1226 if (tree_int_cst_sgn (DR_STEP (dr_info->dr)) >= 0)
1229 tree vectype = STMT_VINFO_VECTYPE (dr_info->stmt);
1236 if (!dr_info->target_alignment.is_constant (&target_alignment_c)
1243 Sets DR_INFO's misalignment
1245 - to the misalignment computed using NPEEL if DR_INFO's salignment is known,
1248 DR_INFO - the data reference whose misalignment is to be adjusted.
1255 vect_update_misalignment_for_peel (dr_vec_info *dr_info,
1258 /* If dr_info is aligned of dr_peel_info is, then mark it so. */
1259 if (vect_dr_aligned_if_peeled_dr_is (dr_info, dr_peel_info))
1261 SET_DR_MISALIGNMENT (dr_info,
1267 if (DR_TARGET_ALIGNMENT (dr_info).is_constant (&alignment)
1268 && known_alignment_for_access_p (dr_info,
1269 STMT_VINFO_VECTYPE (dr_info->stmt))
1273 int misal = dr_info->misalignment;
1274 misal += npeel * TREE_INT_CST_LOW (DR_STEP (dr_info->dr));
1276 set_dr_misalignment (dr_info, misal);
1283 SET_DR_MISALIGNMENT (dr_info, DR_MISALIGNMENT_UNKNOWN);
1286 /* Return true if alignment is relevant for DR_INFO. */
1289 vect_relevant_for_alignment_p (dr_vec_info *dr_info)
1291 stmt_vec_info stmt_info = dr_info->stmt;
1304 || integer_zerop (DR_STEP (dr_info->dr)))
1331 Return true if vector alignment for DR_INFO is reachable by peeling
1335 vector_alignment_reachable_p (dr_vec_info *dr_info)
1337 stmt_vec_info stmt_info = dr_info->stmt;
1348 if (!known_alignment_for_access_p (dr_info, vectype))
1354 mis_in_elements = dr_misalignment (dr_info, vectype) / elem_size;
1362 if (known_alignment_for_access_p (dr_info, vectype)
1363 && !aligned_access_p (dr_info, vectype))
1371 dr_misalignment (dr_info, vectype));
1373 if (dr_misalignment (dr_info, vectype) % elmsize)
1382 if (!known_alignment_for_access_p (dr_info, vectype))
1384 tree type = TREE_TYPE (DR_REF (dr_info->dr));
1385 bool is_packed = not_size_aligned (DR_REF (dr_info->dr));
1397 /* Calculate the cost of the memory access represented by DR_INFO. */
1400 vect_get_data_access_cost (vec_info *vinfo, dr_vec_info *dr_info,
1408 stmt_vec_info stmt_info = dr_info->stmt;
1417 if (DR_IS_READ (dr_info->dr))
1434 dr_vec_info *dr_info;
1469 /* Insert DR_INFO into peeling hash table with NPEEL as key. */
1473 loop_vec_info loop_vinfo, dr_vec_info *dr_info,
1487 slot->dr_info = dr_info;
1516 max->peel_info.dr_info = elem->dr_info;
1545 dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
1546 if (!vect_relevant_for_alignment_p (dr_info))
1549 tree vectype = STMT_VINFO_VECTYPE (dr_info->stmt);
1554 bool negative = tree_int_cst_compare (DR_STEP (dr_info->dr),
1562 misalignment = dr_misalignment (dr_info, vectype, off);
1563 else if (dr_info == dr0_info
1564 || vect_dr_aligned_if_peeled_dr_is (dr_info, dr0_info))
1567 || !known_alignment_for_access_p (dr_info, vectype)
1568 || !DR_TARGET_ALIGNMENT (dr_info).is_constant (&alignment))
1572 misalignment = dr_misalignment (dr_info, vectype, off);
1573 misalignment += npeel * TREE_INT_CST_LOW (DR_STEP (dr_info->dr));
1577 = vect_supportable_dr_alignment (loop_vinfo, dr_info, vectype,
1580 vect_get_data_access_cost (loop_vinfo, dr_info,
1605 vect_get_peeling_costs_all_drs (loop_vinfo, elem->dr_info, &inside_cost,
1629 min->peel_info.dr_info = elem->dr_info;
1648 res.peel_info.dr_info = NULL;
1689 dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
1690 if (!vect_relevant_for_alignment_p (dr_info)
1691 || vect_dr_aligned_if_peeled_dr_is (dr_info, dr0_info))
1694 tree vectype = STMT_VINFO_VECTYPE (dr_info->stmt);
1698 || !known_alignment_for_access_p (dr_info, vectype)
1699 || !DR_TARGET_ALIGNMENT (dr_info).is_constant (&alignment))
1703 misalignment = dr_misalignment (dr_info, vectype);
1704 misalignment += npeel * TREE_INT_CST_LOW (DR_STEP (dr_info->dr));
1708 = vect_supportable_dr_alignment (loop_vinfo, dr_info, vectype,
1951 dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
1952 if (!vect_relevant_for_alignment_p (dr_info))
1955 stmt_vec_info stmt_info = dr_info->stmt;
1957 do_peeling = vector_alignment_reachable_p (dr_info);
1960 if (known_alignment_for_access_p (dr_info, vectype))
1971 DR_TARGET_ALIGNMENT (dr_info).to_constant ();
1972 unsigned HOST_WIDE_INT dr_size = vect_get_scalar_dr_size (dr_info);
1976 unsigned int mis = dr_misalignment (dr_info, vectype, off);
2010 (loop_vinfo, dr_info, vectype, DR_MISALIGNMENT_UNKNOWN);
2014 dr_info, npeel_tmp,
2032 dr0_info = dr_info;
2047 dr0_info = dr_info;
2055 = vect_supportable_dr_alignment (loop_vinfo, dr_info, vectype,
2060 unsupportable_dr_info = dr_info;
2065 first_store = dr_info;
2072 if (!aligned_access_p (dr_info, vectype))
2164 peel_for_unknown_alignment.peel_info.dr_info = dr0_info;
2171 peel_for_known_alignment.peel_info.dr_info = NULL;
2183 if (peel_for_known_alignment.peel_info.dr_info != NULL
2230 dr0_info = best_peel.peel_info.dr_info;
2355 dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
2356 if (!vect_relevant_for_alignment_p (dr_info))
2359 vect_update_misalignment_for_peel (dr_info, dr0_info, npeel);
2402 dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
2403 if (!vect_relevant_for_alignment_p (dr_info))
2406 stmt_vec_info stmt_info = dr_info->stmt;
2421 if ((misalignment = dr_misalignment (dr_info, vectype, off)) == 0)
2425 = vect_supportable_dr_alignment (loop_vinfo, dr_info, vectype,
2456 DR_TARGET_ALIGNMENT (dr_info)))
2500 dr_vec_info *dr_info = STMT_VINFO_DR_INFO (stmt_info);
2501 SET_DR_MISALIGNMENT (dr_info,
2502 vect_dr_misalign_for_aligned_access (dr_info));
2542 dr_vec_info *dr_info = loop_vinfo->lookup_dr (dr);
2543 if (STMT_VINFO_VECTORIZABLE (dr_info->stmt))
2545 if (STMT_VINFO_GROUPED_ACCESS (dr_info->stmt)
2546 && DR_GROUP_FIRST_ELEMENT (dr_info->stmt) != dr_info->stmt)
2548 vect_compute_data_ref_alignment (loop_vinfo, dr_info,
2549 STMT_VINFO_VECTYPE (dr_info->stmt));
2565 dr_vec_info *dr_info = STMT_VINFO_DR_INFO (first_stmt_info);
2570 if (dr_info->misalignment == DR_MISALIGNMENT_UNINITIALIZED)
2571 vect_compute_data_ref_alignment (vinfo, dr_info, SLP_TREE_VECTYPE (node));
2574 else if (known_lt (dr_info->target_alignment, vector_alignment))
2576 poly_uint64 old_target_alignment = dr_info->target_alignment;
2577 int old_misalignment = dr_info->misalignment;
2578 vect_compute_data_ref_alignment (vinfo, dr_info, SLP_TREE_VECTYPE (node));
2581 && dr_info->misalignment == DR_MISALIGNMENT_UNKNOWN)
2583 dr_info->target_alignment = old_target_alignment;
2584 dr_info->misalignment = old_misalignment;
2618 /* Analyze groups of accesses: check that DR_INFO belongs to a group of
2625 vect_analyze_group_access_1 (vec_info *vinfo, dr_vec_info *dr_info)
2627 data_reference *dr = dr_info->dr;
2631 stmt_vec_info stmt_info = dr_info->stmt;
2846 /* Analyze groups of accesses: check that DR_INFO belongs to a group of
2852 vect_analyze_group_access (vec_info *vinfo, dr_vec_info *dr_info)
2854 if (!vect_analyze_group_access_1 (vinfo, dr_info))
2857 stmt_vec_info stmt_info = DR_GROUP_FIRST_ELEMENT (dr_info->stmt);
2870 /* Analyze the access pattern of the data-reference DR_INFO.
2875 vect_analyze_data_ref_access (vec_info *vinfo, dr_vec_info *dr_info)
2877 data_reference *dr = dr_info->dr;
2880 stmt_vec_info stmt_info = dr_info->stmt;
2960 || vect_analyze_group_access (vinfo, dr_info)));
2963 return vect_analyze_group_access (vinfo, dr_info);
3108 dr_vec_info *dr_info = vinfo->lookup_dr (datarefs[i]);
3112 dr_info->group = (*dataref_groups)[i];
3114 dr_info->group = gimple_bb (DR_STMT (datarefs[i]))->index;
3115 datarefs_copy.quick_push (dr_info);
3330 dr_vec_info *dr_info;
3331 FOR_EACH_VEC_ELT (datarefs_copy, i, dr_info)
3333 if (STMT_VINFO_VECTORIZABLE (dr_info->stmt)
3334 && !vect_analyze_data_ref_access (vinfo, dr_info))
3343 STMT_VINFO_VECTORIZABLE (dr_info->stmt) = false;
3349 return opt_result::failure_at (dr_info->stmt->stmt,
3363 DR_INFO: The data reference.
3372 vect_vfa_segment_size (dr_vec_info *dr_info, tree length_factor)
3377 dr_info->dr)),
3381 /* Return a value that, when added to abs (vect_vfa_segment_size (DR_INFO)),
3385 vect_vfa_access_size (vec_info *vinfo, dr_vec_info *dr_info)
3387 stmt_vec_info stmt_vinfo = dr_info->stmt;
3388 tree ref_type = TREE_TYPE (DR_REF (dr_info->dr));
3399 && ((misalignment = dr_misalignment (dr_info, vectype)), true)
3400 && (vect_supportable_dr_alignment (vinfo, dr_info, vectype, misalignment)
3409 /* Get the minimum alignment for all the scalar accesses that DR_INFO
3413 vect_vfa_align (dr_vec_info *dr_info)
3415 return dr_alignment (dr_info->dr);
3554 /* Return true if it's unlikely that the step of the vectorized form of DR_INFO
3558 vect_small_gap_p (loop_vec_info loop_vinfo, dr_vec_info *dr_info,
3561 stmt_vec_info stmt_info = dr_info->stmt;
3567 <= count * vect_get_scalar_dr_size (dr_info));
4778 /* Duplicate points-to info on NAME from DR_INFO. */
4781 vect_duplicate_ssa_name_ptr_info (tree name, dr_vec_info *dr_info)
4783 duplicate_ssa_name_ptr_info (name, DR_PTR_INFO (dr_info->dr));
4825 dr_vec_info *dr_info = STMT_VINFO_DR_INFO (stmt_info);
4826 struct data_reference *dr = dr_info->dr;
4833 innermost_loop_behavior *drb = vect_dr_behavior (vinfo, dr_info);
4836 tree base_offset = unshare_expr (get_dr_vinfo_offset (vinfo, dr_info, true));
4883 vect_duplicate_ssa_name_ptr_info (addr_base, dr_info);
4962 dr_vec_info *dr_info = STMT_VINFO_DR_INFO (stmt_info);
4963 struct data_reference *dr = dr_info->dr;
5106 tree step = vect_dr_behavior (vinfo, dr_info)->step;
5129 vect_duplicate_ssa_name_ptr_info (indx_before_incr, dr_info);
5130 vect_duplicate_ssa_name_ptr_info (indx_after_incr, dr_info);
5158 vect_duplicate_ssa_name_ptr_info (indx_before_incr, dr_info);
5159 vect_duplicate_ssa_name_ptr_info (indx_after_incr, dr_info);
5712 dr_vec_info *dr_info = STMT_VINFO_DR_INFO (stmt_info);
5713 struct data_reference *dr = dr_info->dr;
5825 poly_uint64 align = DR_TARGET_ALIGNMENT (dr_info);
6710 /* Return whether the data reference DR_INFO is supported with respect to its
6717 vect_supportable_dr_alignment (vec_info *vinfo, dr_vec_info *dr_info,
6720 data_reference *dr = dr_info->dr;
6721 stmt_vec_info stmt_info = dr_info->stmt;