Lines Matching full:bounds

73 // "bounds" array has to be allocated per thread.
78 /*in/out*/ bounds_infoXX_template<T> *bounds) { in kmp_canonicalize_one_loop_XX() argument
81 if (bounds->step == 0) { in kmp_canonicalize_one_loop_XX()
87 if (bounds->comparison == comparison_t::comp_not_eq) { in kmp_canonicalize_one_loop_XX()
89 if (bounds->step > 0) { in kmp_canonicalize_one_loop_XX()
90 bounds->comparison = comparison_t::comp_less; in kmp_canonicalize_one_loop_XX()
92 bounds->comparison = comparison_t::comp_greater; in kmp_canonicalize_one_loop_XX()
96 if (bounds->comparison == comparison_t::comp_less) { in kmp_canonicalize_one_loop_XX()
100 bounds->ub0 -= 1; in kmp_canonicalize_one_loop_XX()
101 bounds->comparison = comparison_t::comp_less_or_eq; in kmp_canonicalize_one_loop_XX()
102 } else if (bounds->comparison == comparison_t::comp_greater) { in kmp_canonicalize_one_loop_XX()
103 bounds->ub0 += 1; in kmp_canonicalize_one_loop_XX()
104 bounds->comparison = comparison_t::comp_greater_or_eq; in kmp_canonicalize_one_loop_XX()
114 auto bounds = &(original_bounds_nest[ind]); in kmp_canonicalize_loop_nest() local
116 switch (bounds->loop_type) { in kmp_canonicalize_loop_nest()
120 /*in/out*/ (bounds_infoXX_template<kmp_int32> *)(bounds)); in kmp_canonicalize_loop_nest()
125 /*in/out*/ (bounds_infoXX_template<kmp_uint32> *)(bounds)); in kmp_canonicalize_loop_nest()
130 /*in/out*/ (bounds_infoXX_template<kmp_int64> *)(bounds)); in kmp_canonicalize_loop_nest()
135 /*in/out*/ (bounds_infoXX_template<kmp_uint64> *)(bounds)); in kmp_canonicalize_loop_nest()
154 /*in/out*/ bounds_infoXX_template<T> *bounds) { in kmp_calculate_trip_count_XX() argument
156 if (bounds->comparison == comparison_t::comp_less_or_eq) { in kmp_calculate_trip_count_XX()
157 if (bounds->ub0 < bounds->lb0) { in kmp_calculate_trip_count_XX()
160 bounds->trip_count = 0; in kmp_calculate_trip_count_XX()
164 bounds->trip_count = in kmp_calculate_trip_count_XX()
165 static_cast<kmp_loop_nest_iv_t>(bounds->ub0 - bounds->lb0) / in kmp_calculate_trip_count_XX()
166 __kmp_abs(bounds->step) + in kmp_calculate_trip_count_XX()
169 } else if (bounds->comparison == comparison_t::comp_greater_or_eq) { in kmp_calculate_trip_count_XX()
170 if (bounds->lb0 < bounds->ub0) { in kmp_calculate_trip_count_XX()
173 bounds->trip_count = 0; in kmp_calculate_trip_count_XX()
177 bounds->trip_count = in kmp_calculate_trip_count_XX()
178 static_cast<kmp_loop_nest_iv_t>(bounds->lb0 - bounds->ub0) / in kmp_calculate_trip_count_XX()
179 __kmp_abs(bounds->step) + in kmp_calculate_trip_count_XX()
185 return bounds->trip_count; in kmp_calculate_trip_count_XX()
189 kmp_loop_nest_iv_t kmp_calculate_trip_count(/*in/out*/ bounds_info_t *bounds) { in kmp_calculate_trip_count() argument
193 switch (bounds->loop_type) { in kmp_calculate_trip_count()
196 /*in/out*/ (bounds_infoXX_template<kmp_int32> *)(bounds)); in kmp_calculate_trip_count()
200 /*in/out*/ (bounds_infoXX_template<kmp_uint32> *)(bounds)); in kmp_calculate_trip_count()
204 /*in/out*/ (bounds_infoXX_template<kmp_int64> *)(bounds)); in kmp_calculate_trip_count()
208 /*in/out*/ (bounds_infoXX_template<kmp_uint64> *)(bounds)); in kmp_calculate_trip_count()
305 // Return true if the point fits into upper bounds on this level,
308 bool kmp_iv_is_in_upper_bound_XX(const bounds_infoXX_template<T> *bounds, in kmp_iv_is_in_upper_bound_XX() argument
313 T outer_iv = static_cast<T>(original_ivs[bounds->outer_iv]); in kmp_iv_is_in_upper_bound_XX()
315 if (((bounds->comparison == comparison_t::comp_less_or_eq) && in kmp_iv_is_in_upper_bound_XX()
316 (iv > (bounds->ub0 + bounds->ub1 * outer_iv))) || in kmp_iv_is_in_upper_bound_XX()
317 ((bounds->comparison == comparison_t::comp_greater_or_eq) && in kmp_iv_is_in_upper_bound_XX()
318 (iv < (bounds->ub0 + bounds->ub1 * outer_iv)))) { in kmp_iv_is_in_upper_bound_XX()
327 // Return true if it fits into lower-upper bounds on this level
330 bool kmp_calc_one_iv_XX(const bounds_infoXX_template<T> *bounds, in kmp_calc_one_iv_XX() argument
336 T outer_iv = static_cast<T>(original_ivs[bounds->outer_iv]); in kmp_calc_one_iv_XX()
341 temp = bounds->lb0 + bounds->lb1 * outer_iv; in kmp_calc_one_iv_XX()
344 temp = bounds->lb0 + bounds->lb1 * outer_iv + iteration * bounds->step; in kmp_calc_one_iv_XX()
348 original_ivs[ind] = kmp_fix_iv(bounds->loop_iv_type, temp); in kmp_calc_one_iv_XX()
351 return kmp_iv_is_in_upper_bound_XX(bounds, original_ivs, ind); in kmp_calc_one_iv_XX()
357 bool kmp_calc_one_iv(const bounds_info_t *bounds, in kmp_calc_one_iv() argument
362 switch (bounds->loop_type) { in kmp_calc_one_iv()
365 (bounds_infoXX_template<kmp_int32> *)(bounds), in kmp_calc_one_iv()
371 (bounds_infoXX_template<kmp_uint32> *)(bounds), in kmp_calc_one_iv()
377 (bounds_infoXX_template<kmp_int64> *)(bounds), in kmp_calc_one_iv()
383 (bounds_infoXX_template<kmp_uint64> *)(bounds), in kmp_calc_one_iv()
396 // Return true if it fits into lower-upper bounds on this level
399 void kmp_calc_one_iv_rectang_XX(const bounds_infoXX_template<T> *bounds, in kmp_calc_one_iv_rectang_XX() argument
407 bounds->lb0 + in kmp_calc_one_iv_rectang_XX()
408 bounds->lb1 * static_cast<T>(original_ivs[bounds->outer_iv]) + in kmp_calc_one_iv_rectang_XX()
409 iteration * bounds->step; in kmp_calc_one_iv_rectang_XX()
412 original_ivs[ind] = kmp_fix_iv(bounds->loop_iv_type, temp); in kmp_calc_one_iv_rectang_XX()
415 void kmp_calc_one_iv_rectang(const bounds_info_t *bounds, in kmp_calc_one_iv_rectang() argument
420 switch (bounds->loop_type) { in kmp_calc_one_iv_rectang()
423 (bounds_infoXX_template<kmp_int32> *)(bounds), in kmp_calc_one_iv_rectang()
428 (bounds_infoXX_template<kmp_uint32> *)(bounds), in kmp_calc_one_iv_rectang()
433 (bounds_infoXX_template<kmp_int64> *)(bounds), in kmp_calc_one_iv_rectang()
438 (bounds_infoXX_template<kmp_uint64> *)(bounds), in kmp_calc_one_iv_rectang()
456 // canonical form there will be no changes to bounds in bounds_nest array
469 auto bounds = &(original_bounds_nest[ind]); in __kmpc_process_loop_nest_rectang() local
471 kmp_loop_nest_iv_t trip_count = kmp_calculate_trip_count(/*in/out*/ bounds); in __kmpc_process_loop_nest_rectang()
498 auto bounds = &(original_bounds_nest[ind]); in __kmpc_calc_original_ivs_rectang() local
501 auto temp = new_iv / bounds->trip_count; in __kmpc_calc_original_ivs_rectang()
502 auto iteration = new_iv % bounds->trip_count; in __kmpc_calc_original_ivs_rectang()
510 auto bounds = &(original_bounds_nest[ind]); in __kmpc_calc_original_ivs_rectang() local
512 kmp_calc_one_iv_rectang(bounds, /*in/out*/ original_ivs, iterations, ind); in __kmpc_calc_original_ivs_rectang()
529 /* in/out*/ bounds_info_internalXX_template<T> *bounds, in kmp_calc_span_lessoreq_XX() argument
538 auto &bbounds = bounds->b; in kmp_calc_span_lessoreq_XX()
556 bounds->span_smallest = bound_candidate1; in kmp_calc_span_lessoreq_XX()
558 bounds->span_smallest = bound_candidate2; in kmp_calc_span_lessoreq_XX()
571 bounds->span_biggest = bound_candidate2; in kmp_calc_span_lessoreq_XX()
573 bounds->span_biggest = bound_candidate1; in kmp_calc_span_lessoreq_XX()
578 bounds->span_smallest = bbounds.lb0; in kmp_calc_span_lessoreq_XX()
579 bounds->span_biggest = bbounds.ub0; in kmp_calc_span_lessoreq_XX()
581 if (!bounds->loop_bounds_adjusted) { in kmp_calc_span_lessoreq_XX()
585 bounds->span_biggest -= in kmp_calc_span_lessoreq_XX()
593 /* in/out*/ bounds_info_internalXX_template<T> *bounds, in kmp_calc_span_greateroreq_XX() argument
602 auto &bbounds = bounds->b; in kmp_calc_span_greateroreq_XX()
620 bounds->span_smallest = bound_candidate1; in kmp_calc_span_greateroreq_XX()
622 bounds->span_smallest = bound_candidate2; in kmp_calc_span_greateroreq_XX()
635 bounds->span_biggest = bound_candidate2; in kmp_calc_span_greateroreq_XX()
637 bounds->span_biggest = bound_candidate1; in kmp_calc_span_greateroreq_XX()
643 bounds->span_biggest = bbounds.lb0; in kmp_calc_span_greateroreq_XX()
644 bounds->span_smallest = bbounds.ub0; in kmp_calc_span_greateroreq_XX()
646 if (!bounds->loop_bounds_adjusted) { in kmp_calc_span_greateroreq_XX()
650 bounds->span_biggest -= in kmp_calc_span_greateroreq_XX()
658 /* in/out*/ bounds_info_internalXX_template<T> *bounds, in kmp_calc_span_XX() argument
661 if (bounds->b.comparison == comparison_t::comp_less_or_eq) { in kmp_calc_span_XX()
662 kmp_calc_span_lessoreq_XX(/* in/out*/ bounds, /* in/out*/ bounds_nest); in kmp_calc_span_XX()
664 KMP_ASSERT(bounds->b.comparison == comparison_t::comp_greater_or_eq); in kmp_calc_span_XX()
665 kmp_calc_span_greateroreq_XX(/* in/out*/ bounds, /* in/out*/ bounds_nest); in kmp_calc_span_XX()
671 // Calculate new bounds for this loop level.
674 // overflow, for that we'll adjust both upper and lower bounds as needed.
677 /* in/out*/ bounds_info_internalXX_template<T> *bounds, in kmp_calc_new_bounds_XX() argument
680 auto &bbounds = bounds->b; in kmp_calc_new_bounds_XX()
684 bounds->loop_bounds_adjusted = false; in kmp_calc_new_bounds_XX()
686 bounds->loop_bounds_adjusted = true; in kmp_calc_new_bounds_XX()
696 // get upper and lower bounds to be parallel in kmp_calc_new_bounds_XX()
768 /* in/out*/ bounds_info_internalXX_template<T> *bounds, in kmp_process_one_loop_XX() argument
771 kmp_calc_new_bounds_XX(/* in/out*/ bounds, /* in/out*/ bounds_nest); in kmp_process_one_loop_XX()
772 kmp_calc_span_XX(/* in/out*/ bounds, /* in/out*/ bounds_nest); in kmp_process_one_loop_XX()
773 return kmp_calculate_trip_count_XX(/*in/out*/ &(bounds->b)); in kmp_process_one_loop_XX()
787 auto bounds = &(bounds_nest[ind]); in kmp_process_loop_nest() local
790 switch (bounds->b.loop_type) { in kmp_process_loop_nest()
793 /*in/out*/ (bounds_info_internalXX_template<kmp_int32> *)(bounds), in kmp_process_loop_nest()
798 /*in/out*/ (bounds_info_internalXX_template<kmp_uint32> *)(bounds), in kmp_process_loop_nest()
803 /*in/out*/ (bounds_info_internalXX_template<kmp_int64> *)(bounds), in kmp_process_loop_nest()
808 /*in/out*/ (bounds_info_internalXX_template<kmp_uint64> *)(bounds), in kmp_process_loop_nest()
827 kmp_calc_number_of_iterations_XX(const bounds_infoXX_template<T> *bounds, in kmp_calc_number_of_iterations_XX() argument
833 if (bounds->comparison == comparison_t::comp_less_or_eq) { in kmp_calc_number_of_iterations_XX()
835 (static_cast<T>(original_ivs[ind]) - bounds->lb0 - in kmp_calc_number_of_iterations_XX()
836 bounds->lb1 * static_cast<T>(original_ivs[bounds->outer_iv])) / in kmp_calc_number_of_iterations_XX()
837 __kmp_abs(bounds->step); in kmp_calc_number_of_iterations_XX()
839 KMP_DEBUG_ASSERT(bounds->comparison == comparison_t::comp_greater_or_eq); in kmp_calc_number_of_iterations_XX()
840 iterations = (bounds->lb0 + in kmp_calc_number_of_iterations_XX()
841 bounds->lb1 * static_cast<T>(original_ivs[bounds->outer_iv]) - in kmp_calc_number_of_iterations_XX()
843 __kmp_abs(bounds->step); in kmp_calc_number_of_iterations_XX()
851 kmp_loop_nest_iv_t kmp_calc_number_of_iterations(const bounds_info_t *bounds, in kmp_calc_number_of_iterations() argument
855 switch (bounds->loop_type) { in kmp_calc_number_of_iterations()
858 (bounds_infoXX_template<kmp_int32> *)(bounds), original_ivs, ind); in kmp_calc_number_of_iterations()
862 (bounds_infoXX_template<kmp_uint32> *)(bounds), original_ivs, ind); in kmp_calc_number_of_iterations()
866 (bounds_infoXX_template<kmp_int64> *)(bounds), original_ivs, ind); in kmp_calc_number_of_iterations()
870 (bounds_infoXX_template<kmp_uint64> *)(bounds), original_ivs, ind); in kmp_calc_number_of_iterations()
881 // Take updated bounds and calculate what new_iv will correspond to this point.
883 // original loops bounds. Getting new_iv for the adjusted original IVs will help
893 auto bounds = &(bounds_nest[ind].b); in kmp_calc_new_iv_from_original_ivs() local
895 new_iv = new_iv * bounds->trip_count + in kmp_calc_new_iv_from_original_ivs()
896 kmp_calc_number_of_iterations(bounds, original_ivs, ind); in kmp_calc_new_iv_from_original_ivs()
915 auto bounds = &(original_bounds_nest[ind]); in kmp_calc_original_ivs_from_iterations() local
916 bool good = kmp_calc_one_iv(bounds, /*in/out*/ original_ivs, iterations, in kmp_calc_original_ivs_from_iterations()
944 // Note: lower bounds of all loops may not work -
968 // Return false if there is no next point in the loop bounds.
976 auto bounds = &(original_bounds_nest[ind]); in kmp_calc_next_original_ivs() local
977 iterations[ind] = kmp_calc_number_of_iterations(bounds, original_ivs, ind); in kmp_calc_next_original_ivs()
1003 const bounds_infoXX_template<T> *bounds, in kmp_calc_one_iv_for_chunk_end_XX() argument
1015 T outer_iv = static_cast<T>(original_ivs[bounds->outer_iv]); in kmp_calc_one_iv_for_chunk_end_XX()
1020 temp = bounds->lb0 + bounds->lb1 * outer_iv; in kmp_calc_one_iv_for_chunk_end_XX()
1032 auto step = bounds->step; in kmp_calc_one_iv_for_chunk_end_XX()
1036 ((bounds->lb0 + bounds->lb1 * outer_iv) - in kmp_calc_one_iv_for_chunk_end_XX()
1043 if (((bounds->comparison == comparison_t::comp_less_or_eq) && in kmp_calc_one_iv_for_chunk_end_XX()
1044 (temp < (bounds->lb0 + bounds->lb1 * outer_iv))) || in kmp_calc_one_iv_for_chunk_end_XX()
1045 ((bounds->comparison == comparison_t::comp_greater_or_eq) && in kmp_calc_one_iv_for_chunk_end_XX()
1046 (temp > (bounds->lb0 + bounds->lb1 * outer_iv)))) { in kmp_calc_one_iv_for_chunk_end_XX()
1049 temp = bounds->lb0 + bounds->lb1 * outer_iv + iteration / 2 * step; in kmp_calc_one_iv_for_chunk_end_XX()
1056 temp = kmp_fix_iv(bounds->loop_iv_type, temp); in kmp_calc_one_iv_for_chunk_end_XX()
1060 if (((bounds->comparison == comparison_t::comp_less_or_eq) && in kmp_calc_one_iv_for_chunk_end_XX()
1062 ((bounds->comparison == comparison_t::comp_greater_or_eq) && in kmp_calc_one_iv_for_chunk_end_XX()
1071 original_ivs[ind] = temp = kmp_fix_iv(bounds->loop_iv_type, temp); in kmp_calc_one_iv_for_chunk_end_XX()
1073 if (((bounds->comparison == comparison_t::comp_less_or_eq) && in kmp_calc_one_iv_for_chunk_end_XX()
1074 (temp > (bounds->ub0 + bounds->ub1 * outer_iv))) || in kmp_calc_one_iv_for_chunk_end_XX()
1075 ((bounds->comparison == comparison_t::comp_greater_or_eq) && in kmp_calc_one_iv_for_chunk_end_XX()
1076 (temp < (bounds->ub0 + bounds->ub1 * outer_iv)))) { in kmp_calc_one_iv_for_chunk_end_XX()
1086 bool kmp_calc_one_iv_for_chunk_end(const bounds_info_t *bounds, in kmp_calc_one_iv_for_chunk_end() argument
1094 switch (bounds->loop_type) { in kmp_calc_one_iv_for_chunk_end()
1097 (bounds_infoXX_template<kmp_int32> *)(bounds), in kmp_calc_one_iv_for_chunk_end()
1105 (bounds_infoXX_template<kmp_uint32> *)(bounds), in kmp_calc_one_iv_for_chunk_end()
1113 (bounds_infoXX_template<kmp_int64> *)(bounds), in kmp_calc_one_iv_for_chunk_end()
1121 (bounds_infoXX_template<kmp_uint64> *)(bounds), in kmp_calc_one_iv_for_chunk_end()
1136 // esp. on the lower bounds side. When getting result need to make sure that the
1144 // original upper bounds as the end of the chunk. Chunk won't be empty, because
1174 auto bounds = &(original_bounds_nest[ind]); in kmp_calc_original_ivs_for_chunk_end() local
1178 bounds, updated_bounds, in kmp_calc_original_ivs_for_chunk_end()
1205 (kmp_ivs_eq(bounds->loop_iv_type, original_ivs[ind], in kmp_calc_original_ivs_for_chunk_end()
1209 !(kmp_ivs_eq(bounds->loop_iv_type, original_ivs[ind], in kmp_calc_original_ivs_for_chunk_end()
1219 //----------Calculate upper bounds for the last chunk-------------------------
1223 void kmp_calc_one_iv_end_XX(const bounds_infoXX_template<T> *bounds, in kmp_calc_one_iv_end_XX() argument
1227 T temp = bounds->ub0 + in kmp_calc_one_iv_end_XX()
1228 bounds->ub1 * static_cast<T>(original_ivs[bounds->outer_iv]); in kmp_calc_one_iv_end_XX()
1230 original_ivs[ind] = kmp_fix_iv(bounds->loop_iv_type, temp); in kmp_calc_one_iv_end_XX()
1233 void kmp_calc_one_iv_end(const bounds_info_t *bounds, in kmp_calc_one_iv_end() argument
1236 switch (bounds->loop_type) { in kmp_calc_one_iv_end()
1242 (bounds_infoXX_template<kmp_int32> *)(bounds), in kmp_calc_one_iv_end()
1247 (bounds_infoXX_template<kmp_uint32> *)(bounds), in kmp_calc_one_iv_end()
1252 (bounds_infoXX_template<kmp_int64> *)(bounds), in kmp_calc_one_iv_end()
1257 (bounds_infoXX_template<kmp_uint64> *)(bounds), in kmp_calc_one_iv_end()
1263 // Calculate upper bounds for the last loop iteration. Just use original upper
1264 // bounds (adjusted when canonicalized to use <= / >=). No need to check that
1270 auto bounds = &(original_bounds_nest[ind]); in kmp_calc_original_ivs_for_end() local
1271 kmp_calc_one_iv_end(bounds, /*in/out*/ original_ivs, ind); in kmp_calc_original_ivs_for_end()
1294 // check outer loop bounds: for triangular need to be {0,0}:{N,0} in kmp_identify_nested_loop_structure()
1306 // check inner bounds to determine triangle type in kmp_identify_nested_loop_structure()
1315 // lower triangle loop inner bounds need to be {0,0}:{0/-1,1} in kmp_identify_nested_loop_structure()
1320 // upper triangle loop inner bounds need to be {0,1}:{N,0} in kmp_identify_nested_loop_structure()
1367 // calculate the chunk's lower and upper bounds in kmp_handle_lower_triangle_matrix()
1435 // adjust the upper bounds down by 1 element to point at the last iteration of in kmp_handle_lower_triangle_matrix()
1487 // calculate the chunk's lower and upper bounds in kmp_handle_upper_triangle_matrix()
1540 // adjust the upper bounds down by 1 element to point at the last iteration of in kmp_handle_upper_triangle_matrix()
1574 // canonical form there will be no changes to bounds in bounds_nest array
1576 // to parallelogram/parallelepiped, calculate total, calculate bounds for the
1578 // important on the left side, to hit the lower bounds and not step over), and
1713 // We could not find the ending point, use the original upper bounds: in __kmpc_for_collapsed_init()
1748 // Fill in chunk bounds: in __kmpc_for_collapsed_init()