Skip to content
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
34 changes: 14 additions & 20 deletions sycl/include/sycl/kernel_bundle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,20 @@
#include <sycl/ext/oneapi/properties/property.hpp> // build_options
#include <sycl/ext/oneapi/properties/property_value.hpp> // and log

#include <algorithm> // for copy
#include <array> // for array
#include <cstddef> // for std::byte
#include <cstring> // for size_t, memcpy
#include <functional> // for function
#include <iterator> // for distance, back_inserter
#include <iterator> // for distance
#include <memory> // for shared_ptr, operator==, hash
#if __has_include(<span>)
#include <span>
#endif
#include <string> // for string
#include <type_traits> // for enable_if_t, remove_refer...
#include <unordered_map> // for unordered_map
#include <utility> // for move
#include <variant> // for hash
#include <vector> // for vector
#include <string> // for string
#include <type_traits> // for enable_if_t, remove_refer...
#include <utility> // for move
#include <variant> // for hash
#include <vector> // for vector

namespace sycl {
inline namespace _V1 {
Expand Down Expand Up @@ -958,17 +956,19 @@ struct include_files
detail::PropKind::IncludeFiles> {
include_files() {}
include_files(const std::string &name, const std::string &content) {
record.emplace(name, content);
record.emplace_back(name, content);
}
void add(const std::string &name, const std::string &content) {
bool inserted = record.try_emplace(name, content).second;
if (!inserted) {
if (std::find_if(record.begin(), record.end(), [&name](auto &p) {
return p.first == name;
}) != record.end()) {
throw sycl::exception(make_error_code(errc::invalid),
"Include file '" + name +
"' is already registered");
}
record.emplace_back(name, content);
}
std::unordered_map<std::string, std::string> record;
std::vector<std::pair<std::string, std::string>> record;
};
using include_files_key = include_files;

Expand Down Expand Up @@ -1125,10 +1125,7 @@ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source(
const std::string &Source, PropertyListT props = {}) {
std::vector<std::pair<std::string, std::string>> IncludePairsVec;
if constexpr (props.template has_property<include_files>()) {
const std::unordered_map<std::string, std::string> &IncludePairs =
props.template get_property<include_files>().record;
std::copy(IncludePairs.begin(), IncludePairs.end(),
std::back_inserter(IncludePairsVec));
IncludePairsVec = props.template get_property<include_files>().record;
}

return detail::make_kernel_bundle_from_source(SyclContext, Language, Source,
Expand All @@ -1144,10 +1141,7 @@ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source(
const std::vector<std::byte> &Bytes, PropertyListT props = {}) {
std::vector<std::pair<std::string, std::string>> IncludePairsVec;
if constexpr (props.template has_property<include_files>()) {
const std::unordered_map<std::string, std::string> &IncludePairs =
props.template get_property<include_files>().record;
std::copy(IncludePairs.begin(), IncludePairs.end(),
std::back_inserter(IncludePairsVec));
IncludePairsVec = props.template get_property<include_files>().record;
}

return detail::make_kernel_bundle_from_source(SyclContext, Language, Bytes,
Expand Down
26 changes: 6 additions & 20 deletions sycl/test/abi/sycl_classes_abi_neutral_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,12 @@

// CHECK: 0 | struct sycl::ext::oneapi::experimental::include_files
// CHECK-NEXT: 0 | struct sycl::ext::oneapi::experimental::detail::run_time_property_key
// CHECK: 0 | class std::unordered_map<class std::basic_string<char>, class std::basic_string<char> > record
// CHECK-NEXT: 0 | class std::_Hashtable<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG:(string)|(class std::basic_string<char> )]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > _M_h
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Hash_code_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, struct std::__detail::_Select1st, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, true> (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_ebo_helper<1, struct std::hash<[[HASH_TEMPLATE_ARG]]> > (base) (empty)
// CHECK-NEXT: 0 | struct std::hash<[[HASH_TEMPLATE_ARG]]> (base) (empty)
// CHECK: 0 | struct std::__hash_base<unsigned long, class std::basic_string<char> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_ebo_helper<0, struct std::equal_to<class std::basic_string<char> > > (base) (empty)
// CHECK-NEXT: 0 | struct std::equal_to<class std::basic_string<char> > (base) (empty)
// CHECK-NEXT: 0 | struct std::binary_function<class std::basic_string<char>, class std::basic_string<char>, _Bool> (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Map_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Insert<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Insert_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Rehash_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Equality<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_alloc<class std::allocator<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > > (base) (empty)
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_ebo_helper<0, class std::allocator<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > > (base) (empty)
// CHECK-NEXT: 0 | class std::allocator<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > (base) (empty)
// CHECK-NEXT: 0 | class {{(std::__new_allocator|__gnu_cxx::new_allocator)}}<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > (base) (empty)
// CHECK: 0 | __buckets_ptr _M_buckets
// CHECK: 0 | class std::vector<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > record
// CHECK-NEXT: 0 | struct std::_Vector_base<struct std::pair<class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > > (base)
// CHECK-NEXT: 0 | struct std::_Vector_base<struct std::pair<class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > >::_Vector_impl _M_impl
// CHECK-NEXT: 0 | class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > (base) (empty)
// CHECK-NEXT: 0 | class {{(std::__new_allocator|__gnu_cxx::new_allocator)}}<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > (base) (empty)
// CHECK-NEXT: 0 | {{(struct std::_Vector_base<struct std::pair<class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > >::_Vector_impl_data \(base\)|pointer _M_start)}}

// CHECK: 0 | struct sycl::ext::oneapi::experimental::registered_names
// CHECK-NEXT: 0 | struct sycl::ext::oneapi::experimental::detail::run_time_property_key
Expand Down