@@ -30,16 +30,16 @@ namespace dpl
3030namespace __internal
3131{
3232
33- template <typename _BackendTag, typename _ExecutionPolicy, typename _ForwardIterator, typename _Function>
33+ template <__par_backend_hetero::access_mode __acc_mode, bool _IsNoInitRequested, typename _BackendTag,
34+ typename _ExecutionPolicy, typename _ForwardIterator, typename _Function>
3435auto
3536__pattern_walk1_async (__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _ForwardIterator __first,
3637 _ForwardIterator __last, _Function __f)
3738{
3839 auto __n = __last - __first;
3940 assert (__n > 0 );
4041
41- auto __keep =
42- oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read_write, _ForwardIterator>();
42+ auto __keep = oneapi::dpl::__ranges::__get_sycl_range<__acc_mode, _IsNoInitRequested>();
4343 auto __buf = __keep (__first, __last);
4444
4545 auto __future_obj = oneapi::dpl::__par_backend_hetero::__parallel_for (
@@ -48,21 +48,19 @@ __pattern_walk1_async(__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _For
4848 return __future_obj;
4949}
5050
51- template <__par_backend_hetero::access_mode __acc_mode1 = __par_backend_hetero::access_mode::read,
52- __par_backend_hetero::access_mode __acc_mode2 = __par_backend_hetero::access_mode::write,
53- typename _BackendTag, typename _ExecutionPolicy, typename _ForwardIterator1, typename _ForwardIterator2,
54- typename _Function>
51+ template <__par_backend_hetero::access_mode __out_acc_mode, bool _IsOutNoInitRequested, typename _BackendTag,
52+ typename _ExecutionPolicy, typename _ForwardIterator1, typename _ForwardIterator2, typename _Function>
5553auto
5654__pattern_walk2_async (__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _ForwardIterator1 __first1,
5755 _ForwardIterator1 __last1, _ForwardIterator2 __first2, _Function __f)
5856{
5957 auto __n = __last1 - __first1;
6058 assert (__n > 0 );
6159
62- auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<__acc_mode1, _ForwardIterator1 >();
60+ auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<sycl::access::mode::read >();
6361 auto __buf1 = __keep1 (__first1, __last1);
6462
65- auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__acc_mode2, _ForwardIterator2 >();
63+ auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__out_acc_mode, _IsOutNoInitRequested >();
6664 auto __buf2 = __keep2 (__first2, __first2 + __n);
6765
6866 auto __future = oneapi::dpl::__par_backend_hetero::__parallel_for (
@@ -73,23 +71,21 @@ __pattern_walk2_async(__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _For
7371 return __future.__make_future (__first2 + __n);
7472}
7573
76- template <typename _BackendTag, typename _ExecutionPolicy, typename _ForwardIterator1, typename _ForwardIterator2,
77- typename _ForwardIterator3, typename _Function>
74+ template <__par_backend_hetero::access_mode __output_acc_mode, bool _IsOutNoInitRequested, typename _BackendTag,
75+ typename _ExecutionPolicy, typename _ForwardIterator1, typename _ForwardIterator2, typename _ForwardIterator3,
76+ typename _Function>
7877auto
7978__pattern_walk3_async (__hetero_tag<_BackendTag>, _ExecutionPolicy&& __exec, _ForwardIterator1 __first1,
8079 _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator3 __first3, _Function __f)
8180{
8281 auto __n = __last1 - __first1;
8382 assert (__n > 0 );
8483
85- auto __keep1 =
86- oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read, _ForwardIterator1>();
84+ auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>();
8785 auto __buf1 = __keep1 (__first1, __last1);
88- auto __keep2 =
89- oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read, _ForwardIterator2>();
86+ auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>();
9087 auto __buf2 = __keep2 (__first2, __first2 + __n);
91- auto __keep3 =
92- oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::write, _ForwardIterator3>();
88+ auto __keep3 = oneapi::dpl::__ranges::__get_sycl_range<__output_acc_mode, _IsOutNoInitRequested>();
9389 auto __buf3 = __keep3 (__first3, __first3 + __n);
9490
9591 auto __future = oneapi::dpl::__par_backend_hetero::__parallel_for (
106102__pattern_walk2_brick_async (__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& __exec, _ForwardIterator1 __first1,
107103 _ForwardIterator1 __last1, _ForwardIterator2 __first2, _Brick __brick)
108104{
109- return __pattern_walk2_async (
105+ return __pattern_walk2_async<__par_backend_hetero::access_mode::write, /* _IsNoInitRequested= */ true > (
110106 __tag,
111107 __par_backend_hetero::make_wrapped_policy<__walk2_brick_wrapper>(::std::forward<_ExecutionPolicy>(__exec)),
112108 __first1, __last1, __first2, __brick);
@@ -129,11 +125,9 @@ __pattern_transform_reduce_async(__hetero_tag<_BackendTag>, _ExecutionPolicy&& _
129125 using _RepackedTp = __par_backend_hetero::__repacked_tuple_t <_Tp>;
130126
131127 auto __n = __last1 - __first1;
132- auto __keep1 =
133- oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read, _RandomAccessIterator1>();
128+ auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>();
134129 auto __buf1 = __keep1 (__first1, __last1);
135- auto __keep2 =
136- oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read, _RandomAccessIterator2>();
130+ auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>();
137131 auto __buf2 = __keep2 (__first2, __first2 + __n);
138132
139133 return oneapi::dpl::__par_backend_hetero::__parallel_transform_reduce<_RepackedTp,
@@ -159,7 +153,7 @@ __pattern_transform_reduce_async(__hetero_tag<_BackendTag>, _ExecutionPolicy&& _
159153 using _Functor = unseq_backend::walk_n<_UnaryOperation>;
160154 using _RepackedTp = __par_backend_hetero::__repacked_tuple_t <_Tp>;
161155
162- auto __keep = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read, _ForwardIterator >();
156+ auto __keep = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>();
163157 auto __buf = __keep (__first, __last);
164158
165159 return oneapi::dpl::__par_backend_hetero::__parallel_transform_reduce<_RepackedTp,
174168__pattern_fill_async (__hetero_tag<_BackendTag> __tag, _ExecutionPolicy&& __exec, _ForwardIterator __first,
175169 _ForwardIterator __last, const _T& __value)
176170{
177- return __pattern_walk1_async (
171+ return __pattern_walk1_async<__par_backend_hetero::access_mode::read_write, /* _IsNoInitRequested= */ false > (
178172 __tag, ::std::forward<_ExecutionPolicy>(__exec),
179173 __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__first),
180174 __par_backend_hetero::make_iter_mode<__par_backend_hetero::access_mode::write>(__last),
@@ -195,9 +189,10 @@ __pattern_transform_scan_base_async(__hetero_tag<_BackendTag>, _ExecutionPolicy&
195189 assert (__first < __last);
196190
197191 auto __n = __last - __first;
198- auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read, _Iterator1 >();
192+ auto __keep1 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::read>();
199193 auto __buf1 = __keep1 (__first, __last);
200- auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::write, _Iterator2>();
194+ auto __keep2 = oneapi::dpl::__ranges::__get_sycl_range<__par_backend_hetero::access_mode::write,
195+ /* _IsNoInitRequested=*/ true >();
201196 auto __buf2 = __keep2 (__result, __result + __n);
202197
203198 auto __res = oneapi::dpl::__par_backend_hetero::__parallel_transform_scan (
0 commit comments