Skip to content

[SYCL] Fix return type of the accessor::get_pointer and local_accessor::get_pointer. #8493

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 40 commits into from
Mar 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
2503a62
Diagnostic for const qualified DataT with non read-only accessor
mmoadeli Jan 31, 2023
862b688
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Jan 31, 2023
1edb94f
Add test for const qualified DataT with non readonly accessor.
mmoadeli Jan 31, 2023
7ba64c6
Assign valid access mode for local accessor, depending on the type of…
mmoadeli Feb 1, 2023
ef0038e
Minor test update.
mmoadeli Feb 1, 2023
36971f8
- Rename AccessMode to AccessModeFromConstness
mmoadeli Feb 2, 2023
29e3036
- Revert test to be without -Xclang -verify.
mmoadeli Feb 2, 2023
92debe8
Refactors implementation of diagnostic to avoid compiler errors due t…
mmoadeli Feb 3, 2023
7eac372
Updates the test to use -Xclang -verify
mmoadeli Feb 3, 2023
dcac706
Fix style-checl
mmoadeli Feb 3, 2023
9d4b313
Merge branch 'intel:sycl' into sycl
mmoadeli Feb 6, 2023
ad92330
Merge branch 'intel:sycl' into sycl
mmoadeli Feb 7, 2023
ce1cbe8
Merge branch 'intel:sycl' into sycl
mmoadeli Feb 20, 2023
dc33cc4
Merge branch 'intel:sycl' into sycl
mmoadeli Feb 22, 2023
44b1f9e
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Feb 22, 2023
2803f25
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Feb 27, 2023
0b358a5
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Feb 28, 2023
00c9329
Fix rerurn type of the accessor::get_pointer and local_accessor::get_…
mmoadeli Feb 28, 2023
beabf81
Add get_pointer for accessor with target::local according to the spec…
mmoadeli Mar 1, 2023
29fadf4
Remove commented out code.
mmoadeli Mar 1, 2023
103f35a
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Mar 9, 2023
7fa63a4
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Mar 10, 2023
502f94c
Merge branch 'sycl' into get_pointer
mmoadeli Mar 10, 2023
1456887
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Mar 11, 2023
5060fcf
Merge branch 'sycl' into get_pointer
mmoadeli Mar 11, 2023
2939b5d
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Mar 13, 2023
47f59fa
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Mar 14, 2023
94c6219
Remove get_pointer from target::local specialization of accessor.
mmoadeli Mar 19, 2023
1642661
Merge branch 'sycl' of https://github.com/mmoadeli/llvm into sycl
mmoadeli Mar 19, 2023
f98cdad
Merge branch 'sycl' into get_pointer
mmoadeli Mar 19, 2023
34d4abc
-Re-Add old get_pointer implementation to target::local specialized a…
mmoadeli Mar 20, 2023
c2ac5e2
Remove definition of decorated_type in decorated::legacy specialized …
mmoadeli Mar 20, 2023
627a270
Merge branch 'sycl' into get_pointer
mmoadeli Mar 20, 2023
e5cf267
Update sycl/include/sycl/multi_ptr.hpp
mmoadeli Mar 21, 2023
4463651
Update sycl/include/sycl/multi_ptr.hpp
mmoadeli Mar 21, 2023
abafe2e
Update sycl/include/sycl/multi_ptr.hpp
mmoadeli Mar 21, 2023
4621dc4
Update sycl/include/sycl/multi_ptr.hpp
mmoadeli Mar 21, 2023
057528a
Add test for get_pointer and reverts earlier change to get_multi_ptr
mmoadeli Mar 21, 2023
166b652
Fix a minor style.
mmoadeli Mar 21, 2023
8d595bc
Remove unused alias definition
mmoadeli Mar 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions sycl/include/sycl/accessor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2087,8 +2087,9 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor :
}

template <access::target AccessTarget_ = AccessTarget,
typename = detail::enable_if_t<AccessTarget_ ==
access::target::host_buffer>>
typename = detail::enable_if_t<
(AccessTarget_ == access::target::host_buffer) ||
(AccessTarget_ == access::target::host_task)>>
#if SYCL_LANGUAGE_VERSION >= 202001
std::add_pointer_t<value_type> get_pointer() const noexcept
#else
Expand Down Expand Up @@ -2663,10 +2664,6 @@ class __SYCL_SPECIAL_CLASS local_accessor_base :
return AccessorSubscript<Dims - 1>(*this, Index);
}

local_ptr<DataT> get_pointer() const {
return local_ptr<DataT>(getQualifiedPtr());
}

bool operator==(const local_accessor_base &Rhs) const {
return impl == Rhs.impl;
}
Expand Down Expand Up @@ -2695,6 +2692,11 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS accessor<
// Use base classes constructors
using local_acc::local_acc;

public:
local_ptr<DataT> get_pointer() const {
return local_ptr<DataT>(local_acc::getQualifiedPtr());
}

#ifdef __SYCL_DEVICE_ONLY__

// __init needs to be defined within the class not through inheritance.
Expand Down Expand Up @@ -2801,6 +2803,10 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor
return const_reverse_iterator(begin());
}

std::add_pointer_t<value_type> get_pointer() const noexcept {
return std::add_pointer_t<value_type>(local_acc::getQualifiedPtr());
}

template <access::decorated IsDecorated>
accessor_ptr<IsDecorated> get_multi_ptr() const noexcept {
return accessor_ptr<IsDecorated>(local_acc::getQualifiedPtr());
Expand Down
14 changes: 7 additions & 7 deletions sycl/include/sycl/multi_ptr.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ class multi_ptr {
(Space == access::address_space::generic_space ||
Space == access::address_space::local_space)>>
multi_ptr(local_accessor<ElementType, Dimensions> Accessor)
: multi_ptr(Accessor.get_pointer().get()) {}
: m_Pointer(detail::cast_AS<decorated_type *>(Accessor.get_pointer())) {}

// The following constructors are necessary to create multi_ptr<const
// ElementType, Space, DecorateAddress> from accessor<ElementType, ...>.
Expand Down Expand Up @@ -210,7 +210,7 @@ class multi_ptr {
multi_ptr(local_accessor<typename detail::remove_const_t<RelayElementType>,
Dimensions>
Accessor)
: multi_ptr(Accessor.get_pointer().get()) {}
: m_Pointer(detail::cast_AS<decorated_type *>(Accessor.get_pointer())) {}

// Assignment and access operators
multi_ptr &operator=(const multi_ptr &) = default;
Expand Down Expand Up @@ -465,7 +465,7 @@ class multi_ptr<const void, Space, DecorateAddress> {
typename = typename detail::enable_if_t<
RelaySpace == Space && Space == access::address_space::local_space>>
multi_ptr(local_accessor<ElementType, Dimensions> Accessor)
: multi_ptr(Accessor.get_pointer().get()) {}
: m_Pointer(detail::cast_AS<decorated_type *>(Accessor.get_pointer())) {}

// Assignment operators
multi_ptr &operator=(const multi_ptr &) = default;
Expand Down Expand Up @@ -591,7 +591,7 @@ class multi_ptr<void, Space, DecorateAddress> {
typename = typename detail::enable_if_t<
RelaySpace == Space && Space == access::address_space::local_space>>
multi_ptr(local_accessor<ElementType, Dimensions> Accessor)
: multi_ptr(Accessor.get_pointer().get()) {}
: m_Pointer(detail::cast_AS<decorated_type *>(Accessor.get_pointer())) {}

// Assignment operators
multi_ptr &operator=(const multi_ptr &) = default;
Expand Down Expand Up @@ -848,7 +848,7 @@ class multi_ptr<ElementType, Space, access::decorated::legacy> {
std::is_const<ET>::value && std::is_same<ET, ElementType>::value>>
multi_ptr(
local_accessor<typename detail::remove_const_t<ET>, dimensions> Accessor)
: multi_ptr(Accessor.get_pointer()) {}
: m_Pointer(detail::cast_AS<pointer_t>(Accessor.get_pointer())) {}

// Only if Space == constant_space and element type is const
template <
Expand Down Expand Up @@ -1089,7 +1089,7 @@ class multi_ptr<void, Space, access::decorated::legacy> {
_Space == Space && (Space == access::address_space::generic_space ||
Space == access::address_space::local_space)>>
multi_ptr(local_accessor<ElementType, dimensions> Accessor)
: multi_ptr(Accessor.get_pointer()) {}
: m_Pointer(detail::cast_AS<pointer_t>(Accessor.get_pointer())) {}

// Only if Space == constant_space
template <
Expand Down Expand Up @@ -1232,7 +1232,7 @@ class multi_ptr<const void, Space, access::decorated::legacy> {
_Space == Space && (Space == access::address_space::generic_space ||
Space == access::address_space::local_space)>>
multi_ptr(local_accessor<ElementType, dimensions> Accessor)
: multi_ptr(Accessor.get_pointer()) {}
: m_Pointer(detail::cast_AS<pointer_t>(Accessor.get_pointer())) {}

// Only if Space == constant_space
template <
Expand Down
27 changes: 27 additions & 0 deletions sycl/test/basic_tests/accessor/accessor_get_pointer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -fsyntax-only

#include <cassert>
#include <sycl/sycl.hpp>
#include <type_traits>

using namespace sycl;

constexpr static int size = 1;

void test_get_multi_ptr(handler &cgh, buffer<int, size> &buffer) {
using target_local_accessor_t =
accessor<int, size, access::mode::read_write, access::target::local>;
using local_accessor_t = local_accessor<int, size>;

auto acc = buffer.get_access<access_mode::read_write, target::host_task>(cgh);
auto target_local_acc = target_local_accessor_t({size}, cgh);
auto local_acc = local_accessor_t({size}, cgh);

auto acc_ptr = acc.get_pointer();
auto target_local_ptr = target_local_acc.get_pointer();
auto local_pointer = local_acc.get_pointer();
static_assert(std::is_same_v<decltype(acc_ptr), std::add_pointer_t<int>>);
static_assert(std::is_same_v<decltype(target_local_ptr), local_ptr<int>>);
static_assert(
std::is_same_v<decltype(local_pointer), std::add_pointer_t<int>>);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}
}