Skip to content

[SYCL][ABI-Break] Remove getRawSyclObjImpl() from headers #14585

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 13 commits into from
Jul 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
13 changes: 8 additions & 5 deletions sycl/include/sycl/accessor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ class __SYCL_EXPORT AccessorBaseHost {
void *getMemoryObject() const;

template <class Obj>
friend decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -586,7 +586,8 @@ class __SYCL_EXPORT LocalAccessorBaseHost {

protected:
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -844,7 +845,8 @@ class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(accessor) accessor :
friend class sycl::ext::intel::esimd::detail::AccessorPrivateProxy;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -2236,7 +2238,8 @@ class __SYCL_SPECIAL_CLASS local_accessor_base :
}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -2654,7 +2657,7 @@ class __SYCL_EBO host_accessor
access::placeholder::false_t>{Impl} {}

template <class Obj>
friend decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
18 changes: 12 additions & 6 deletions sycl/include/sycl/accessor_image.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ class __SYCL_EXPORT UnsampledImageAccessorBaseHost {

protected:
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -167,7 +168,8 @@ class __SYCL_EXPORT SampledImageAccessorBaseHost {

protected:
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -931,7 +933,8 @@ class __SYCL_EBO unsampled_image_accessor :
}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -1067,7 +1070,8 @@ class __SYCL_EBO host_unsampled_image_accessor
: base_class{Impl} {}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -1210,7 +1214,8 @@ class __SYCL_EBO sampled_image_accessor :
}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -1313,7 +1318,8 @@ class __SYCL_EBO host_sampled_image_accessor
: base_class{Impl} {}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
3 changes: 2 additions & 1 deletion sycl/include/sycl/buffer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,8 @@ class buffer : public detail::buffer_plain,

private:
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);
template <typename A, int dims, typename C, typename Enable>
friend class buffer;
template <typename DataT, int dims, access::mode mode, access::target target,
Expand Down
7 changes: 2 additions & 5 deletions sycl/include/sycl/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,11 +246,8 @@ class __SYCL_EXPORT context : public detail::OwnerLessBase<context> {
friend auto get_native(const SyclT &Obj) -> backend_return_t<Backend, SyclT>;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend typename std::add_pointer_t<typename decltype(T::impl)::element_type>
detail::getRawSyclObjImpl(const T &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
12 changes: 2 additions & 10 deletions sycl/include/sycl/detail/impl_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,12 @@ namespace detail {
// would trigger that error in MSVC:
// template <class T>
// friend decltype(T::impl) detail::getSyclObjImpl(const T &SyclObject);
template <class Obj> decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject) {
template <class Obj>
const decltype(Obj::impl) &getSyclObjImpl(const Obj &SyclObject) {
assert(SyclObject.impl && "every constructor should create an impl");
return SyclObject.impl;
}

// Returns the raw pointer to the impl object of given face object. The caller
// must make sure the returned pointer is not captured in a field or otherwise
// stored - i.e. must live only as on-stack value.
template <class T>
typename std::add_pointer_t<typename decltype(T::impl)::element_type>
getRawSyclObjImpl(const T &SyclObject) {
return SyclObject.impl.get();
}

// Helper function for creation SYCL interface objects from implementations.
// Note! This function relies on the fact that all SYCL interface classes
// contain "impl" field that points to implementation object. "impl" field
Expand Down
7 changes: 2 additions & 5 deletions sycl/include/sycl/device.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,8 @@ class __SYCL_EXPORT device : public detail::OwnerLessBase<device> {
pi_native_handle getNative() const;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend typename std::add_pointer_t<typename decltype(T::impl)::element_type>
detail::getRawSyclObjImpl(const T &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
3 changes: 2 additions & 1 deletion sycl/include/sycl/event.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ class __SYCL_EXPORT event : public detail::OwnerLessBase<event> {
std::shared_ptr<detail::event_impl> impl;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
2 changes: 1 addition & 1 deletion sycl/include/sycl/ext/oneapi/bindless_images_memory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class __SYCL_EXPORT image_mem {
std::shared_ptr<detail::image_mem_impl> impl;

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
};

Expand Down
8 changes: 4 additions & 4 deletions sycl/include/sycl/ext/oneapi/experimental/graph.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ class __SYCL_EXPORT node {
node(const std::shared_ptr<detail::node_impl> &Impl) : impl(Impl) {}

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
template <class T>
friend T sycl::detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -342,7 +342,7 @@ class __SYCL_EXPORT modifiable_command_graph {
void addGraphLeafDependencies(node Node);

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
template <class T>
friend T sycl::detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -380,7 +380,7 @@ class __SYCL_EXPORT executable_command_graph {
const property_list &PropList = {});

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);

/// Creates a backend representation of the graph in \p impl member variable.
Expand Down Expand Up @@ -442,7 +442,7 @@ class __SYCL_EXPORT dynamic_parameter_base {
std::shared_ptr<dynamic_parameter_impl> impl;

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);
};
} // namespace detail
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class __SYCL_EXPORT physical_mem
std::shared_ptr<sycl::detail::physical_mem_impl> impl;

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
Expand Down
5 changes: 3 additions & 2 deletions sycl/include/sycl/ext/oneapi/weak_object_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ template <typename SYCLObjT> class weak_object_base {
protected:
#ifndef __SYCL_DEVICE_ONLY__
// Store a weak variant of the impl in the SYCLObjT.
typename decltype(sycl::detail::getSyclObjImpl(
std::declval<SYCLObjT>()))::weak_type MObjWeakPtr;
typename std::remove_reference<decltype(sycl::detail::getSyclObjImpl(
std::declval<SYCLObjT>()))>::type::weak_type MObjWeakPtr;
// relies on <type_traits> from impl_utils.h

static decltype(MObjWeakPtr) GetWeakImpl(const SYCLObjT &SYCLObj) {
return sycl::detail::getSyclObjImpl(SYCLObj);
Expand Down
2 changes: 1 addition & 1 deletion sycl/include/sycl/handler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3369,7 +3369,7 @@ class __SYCL_EXPORT handler {
friend class ext::intel::experimental::pipe;

template <class Obj>
friend decltype(Obj::impl)
friend const decltype(Obj::impl) &
sycl::detail::getSyclObjImpl(const Obj &SyclObject);

/// Read from a host pipe given a host address and
Expand Down
9 changes: 6 additions & 3 deletions sycl/include/sycl/image.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,8 @@ class image : public detail::unsampled_image_common<Dimensions, AllocatorT> {
const context &TargetContext, event AvailableEvent);

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <typename DataT, int Dims, access::mode AccMode,
access::target AccTarget, access::placeholder IsPlaceholder,
Expand Down Expand Up @@ -1002,7 +1003,8 @@ class unsampled_image

private:
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -1137,7 +1139,8 @@ class sampled_image

private:
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
3 changes: 2 additions & 1 deletion sycl/include/sycl/kernel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,8 @@ class __SYCL_EXPORT kernel : public detail::OwnerLessBase<kernel> {
std::shared_ptr<detail::kernel_impl> impl;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);
template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
template <backend BackendName, class SyclObjectT>
Expand Down
12 changes: 8 additions & 4 deletions sycl/include/sycl/kernel_bundle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ class __SYCL_EXPORT kernel_id : public detail::OwnerLessBase<kernel_id> {
std::shared_ptr<detail::kernel_id_impl> impl;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -110,7 +111,8 @@ class __SYCL_EXPORT device_image_plain {
detail::DeviceImageImplPtr impl;

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -141,7 +143,8 @@ class device_image : public detail::device_image_plain,
: device_image_plain(std::move(Impl)) {}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down Expand Up @@ -415,7 +418,8 @@ class kernel_bundle : public detail::kernel_bundle_plain,
: kernel_bundle_plain(std::move(Impl)) {}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
Expand Down
3 changes: 2 additions & 1 deletion sycl/include/sycl/platform.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,8 @@ class __SYCL_EXPORT platform : public detail::OwnerLessBase<platform> {
template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);

template <backend BackendName, class SyclObjectT>
friend auto get_native(const SyclObjectT &Obj)
Expand Down
2 changes: 1 addition & 1 deletion sycl/include/sycl/queue.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2678,7 +2678,7 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
queue(std::shared_ptr<detail::queue_impl> impl) : impl(impl) {}

template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl)& detail::getSyclObjImpl(const Obj &SyclObject);
template <class T>
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

Expand Down
3 changes: 2 additions & 1 deletion sycl/include/sycl/sampler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ class __SYCL_EXPORT __SYCL_SPECIAL_CLASS __SYCL_TYPE(sampler) sampler {
#else
std::shared_ptr<detail::sampler_impl> impl;
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);
#endif
template <typename DataT, int Dimensions, sycl::access::mode AccessMode,
sycl::access::target AccessTarget,
Expand Down
3 changes: 2 additions & 1 deletion sycl/include/sycl/stream.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -928,7 +928,8 @@ class __SYCL_EXPORT __SYCL_SPECIAL_CLASS __SYCL_TYPE(stream) stream
#else
std::shared_ptr<detail::stream_impl> impl;
template <class Obj>
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
friend const decltype(Obj::impl) &
detail::getSyclObjImpl(const Obj &SyclObject);
#endif

// NOTE: Some members are required for reconstructing the stream, but are not
Expand Down
Loading
Loading