@@ -88,7 +88,7 @@ __minmax_element_vectorized(_Iter __first, _Iter __last) {
8888 using __value_type = __iter_value_type<_Iter>;
8989 constexpr size_t __unroll_count = 4 ;
9090 constexpr size_t __vec_size = __native_vector_size<__value_type>;
91- using __vec_type = __simd_vector<__value_type, __vec_size>;
91+ using __vec_type = __simd_vector<__value_type, __vec_size>;
9292 if (__last == __first) [[__unlikely__]] {
9393 return {__first, __first};
9494 }
@@ -105,19 +105,19 @@ __minmax_element_vectorized(_Iter __first, _Iter __last) {
105105 __vec_type __vec[__unroll_count];
106106 for (size_t __i = 0 ; __i < __unroll_count; ++__i) {
107107 __vec[__i] = std::__load_vector<__vec_type>(__first + __i * __vec_size);
108- // min
108+ // block min
109109 auto __block_min_element = __builtin_reduce_min (__vec[__i]);
110110 if (__block_min_element < __min_element) {
111111 __min_element = __block_min_element;
112112 __min_block_start = __first + __i * __vec_size;
113- __min_block_start = __first + (__i + 1 ) * __vec_size;
113+ __min_block_end = __first + (__i + 1 ) * __vec_size;
114114 }
115- // max
115+ // block max
116116 auto __block_max_element = __builtin_reduce_max (__vec[__i]);
117117 if (__block_max_element > __max_element) {
118118 __max_element = __block_max_element;
119119 __max_block_start = __first + __i * __vec_size;
120- __max_block_start = __first + (__i + 1 ) * __vec_size;
120+ __max_block_end = __first + (__i + 1 ) * __vec_size;
121121 }
122122 }
123123 __first += __unroll_count * __vec_size;
@@ -130,22 +130,22 @@ __minmax_element_vectorized(_Iter __first, _Iter __last) {
130130 if (__block_min_element < __min_element) {
131131 __min_element = __block_min_element;
132132 __min_block_start = __first;
133- __min_block_start = __first + __vec_size;
133+ __min_block_end = __first + __vec_size;
134134 }
135135 // max
136136 auto __block_max_element = __builtin_reduce_max (__vec);
137137 if (__block_max_element > __max_element) {
138138 __max_element = __block_max_element;
139139 __max_block_start = __first;
140- __max_block_start = __first + __vec_size;
140+ __max_block_end = __first + __vec_size;
141141 }
142142 __first += __vec_size;
143143 }
144144
145145 if (__last > __first) {
146- __less_tag __pred ;
147- __identity __proj;
148- auto __epilogue = std::__minmax_element_loop (__first, __last, __pred , __proj);
146+ auto __comp = std::__less<>{} ;
147+ std:: __identity __proj;
148+ auto __epilogue = std::__minmax_element_loop (__first, __last, __comp , __proj);
149149 auto __epilogue_min_element = *__epilogue.first ;
150150 auto __epilogue_max_element = *__epilogue.second ;
151151 if (__epilogue_min_element < __min_element && __epilogue_max_element > __max_element) {
@@ -154,7 +154,7 @@ __minmax_element_vectorized(_Iter __first, _Iter __last) {
154154 __min_element = __epilogue_min_element;
155155 __min_block_start = __first;
156156 __min_block_end = __first; // this is global min_element
157- } else {
157+ } else { // __epilogue_max_element > __max_element
158158 __max_element = __epilogue_max_element;
159159 __max_block_start = __first;
160160 __max_block_end = __first; // this is global max_element
@@ -173,6 +173,7 @@ __minmax_element_vectorized(_Iter __first, _Iter __last) {
173173 break ;
174174 }
175175
176+
176177 return {__min_block_start, __max_block_start};
177178}
178179
0 commit comments