Skip to content
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
916dba8
support_rounding_models_for_non-host_devices #1.1
fadeeval Mar 13, 2020
0dba70d
support_rounding_models_for_non-host_devices #1.2
fadeeval Mar 16, 2020
0443893
support_rounding_models_for_non-host_devices #1.3
fadeeval Mar 16, 2020
cf7c3d4
Raw commit
fadeeval Mar 19, 2020
b4a9f93
Alpha version
fadeeval Mar 23, 2020
c671d9b
Alppha 2
fadeeval Mar 23, 2020
6c43eca
Origin
fadeeval Mar 24, 2020
bb88eff
Operative commit
fadeeval Mar 25, 2020
cf8e720
Fix the return type
fadeeval Mar 26, 2020
bbad4df
Converting SYCL types in OpenCL types
fadeeval Mar 26, 2020
b9a171e
Formatting and assert changes
fadeeval Mar 27, 2020
f927a3e
Fix of the spirv functions declaration
fadeeval Mar 30, 2020
2a96e9b
Metaprogramming
fadeeval Apr 1, 2020
a03b462
Adding macros
fadeeval Apr 1, 2020
070fbf5
Restore spirv_ops.hpp
fadeeval Apr 2, 2020
9c13847
Macros improving
fadeeval Apr 2, 2020
543fe09
Unsign to sign convert
fadeeval Apr 2, 2020
ec8806a
Reverting
fadeeval Apr 2, 2020
870059e
Patch
fadeeval Apr 3, 2020
ea768af
Formatting
fadeeval Apr 3, 2020
238ee1a
Formatting 2
fadeeval Apr 3, 2020
c03698b
Revert
fadeeval Apr 3, 2020
e0b0566
Formatting 3
fadeeval Apr 3, 2020
c5cf20e
Coments
fadeeval Apr 8, 2020
8267f30
Coments fix
fadeeval Apr 8, 2020
33220d7
Formatting 4
fadeeval Apr 8, 2020
5683577
Test fix
fadeeval Apr 10, 2020
5cd3e6e
Test fix2
fadeeval Apr 10, 2020
843bf4a
Cuda unsupp
fadeeval Apr 10, 2020
2a1fb94
delete unsupported: cuda
fadeeval Apr 13, 2020
8921bc3
vec_convert.cpp XFail: cuda
fadeeval Apr 13, 2020
f6d6777
Unsupported on cuda buffer_dev_to_dev.cpp
fadeeval Apr 14, 2020
e875fbf
TrueChar to Char
fadeeval Apr 14, 2020
f1f2897
schar to char
fadeeval Apr 14, 2020
c417b51
fix TrueChar
fadeeval Apr 15, 2020
014c0d4
Comments fix
fadeeval Apr 15, 2020
b0eb8e0
Fix
fadeeval Apr 15, 2020
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
29 changes: 17 additions & 12 deletions clang/lib/Sema/SPIRVBuiltins.td
Original file line number Diff line number Diff line change
Expand Up @@ -711,31 +711,36 @@ foreach name = ["GenericPtrMemSemantics"] in {

// 3.32.11. Conversion Instructions

foreach IType = [UChar, UShort, UInt, ULong] in {
foreach UIType = [UChar, UShort, UInt, ULong] in {
foreach FType = [Float, Double, Half] in {
def : SPVBuiltin<"ConvertFToU_R" # IType.Name, [IType, FType], Attr.Const>;
def : SPVBuiltin<"ConvertUToF_R" # FType.Name, [FType, IType], Attr.Const>;
def : SPVBuiltin<"ConvertFToU_R" # UIType.Name, [UIType, FType], Attr.Const>;
def : SPVBuiltin<"ConvertUToF_R" # FType.Name, [FType, UIType], Attr.Const>;
foreach rnd = ["", "_rte", "_rtz", "_rtp", "_rtn"] in {
def : SPVBuiltin<"ConvertFToU_R" # UIType.Name # rnd, [UIType, FType], Attr.Const>;
}
foreach v = [2, 3, 4, 8, 16] in {
def : SPVBuiltin<"ConvertFToU_R" # IType.Name # v,
[VectorType<IType, v>, VectorType<FType, v>],
def : SPVBuiltin<"ConvertFToU_R" # UIType.Name # v,
[VectorType<UIType, v>, VectorType<FType, v>],
Attr.Const>;
def : SPVBuiltin<"ConvertUToF_R" # FType.Name # v,
[VectorType<FType, v>, VectorType<IType, v>],
[VectorType<FType, v>, VectorType<UIType, v>],
Attr.Const>;
}
}
}

foreach IType = [Char, Short, Int, Long] in {
foreach SIType = [TrueChar, Short, Int, Long] in {
foreach FType = [Float, Double, Half] in {
def : SPVBuiltin<"ConvertFToS_R" # IType.Name, [IType, FType], Attr.Const>;
def : SPVBuiltin<"ConvertSToF_R" # FType.Name, [FType, IType], Attr.Const>;
def : SPVBuiltin<"ConvertSToF_R" # FType.Name, [FType, SIType], Attr.Const>;
foreach rnd = ["", "_rte", "_rtz", "_rtp", "_rtn"] in {
def : SPVBuiltin<"ConvertFToS_R" # SIType.Name # rnd, [SIType, FType], Attr.Const>;
}
foreach v = [2, 3, 4, 8, 16] in {
def : SPVBuiltin<"ConvertFToS_R" # IType.Name # v,
[VectorType<IType, v>, VectorType<FType, v>],
def : SPVBuiltin<"ConvertFToS_R" # SIType.Name # v,
[VectorType<SIType, v>, VectorType<FType, v>],
Attr.Const>;
def : SPVBuiltin<"ConvertSToF_R" # FType.Name # v,
[VectorType<FType, v>, VectorType<IType, v>],
[VectorType<FType, v>, VectorType<SIType, v>],
Attr.Const>;
}
}
Expand Down
59 changes: 56 additions & 3 deletions sycl/include/CL/sycl/types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ detail::enable_if_t<std::is_same<T, R>::value, R> convertImpl(T Value) {
return Value;
}

#ifndef __SYCL_DEVICE_ONLY__
// Note for float to half conversions, static_cast calls the conversion operator
// implemented for host that takes care of the precision requirements.
template <typename T, typename R, rounding_mode roundingMode>
Expand All @@ -234,7 +235,6 @@ convertImpl(T Value) {
// float to int
template <typename T, typename R, rounding_mode roundingMode>
detail::enable_if_t<is_float_to_int<T, R>::value, R> convertImpl(T Value) {
#ifndef __SYCL_DEVICE_ONLY__
switch (roundingMode) {
// Round to nearest even is default rounding mode for floating-point types
case rounding_mode::automatic:
Expand Down Expand Up @@ -264,12 +264,65 @@ detail::enable_if_t<is_float_to_int<T, R>::value, R> convertImpl(T Value) {
assert(!"Unsupported rounding mode!");
return static_cast<R>(Value);
};
}
#else
// TODO implement device side conversion.

template <typename T, typename R, rounding_mode roundingMode>
detail::enable_if_t<!std::is_same<T, R>::value &&
(is_int_to_int<T, R>::value &&
!(is_int_to_from_uint<T, R>::value) ||
Copy link
Contributor

Choose a reason for hiding this comment

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

This line seem cause build error, please double-check

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I forgot to delete it.

is_int_to_float<T, R>::value ||
is_float_to_float<T, R>::value),
R>
convertImpl(T Value) {
return static_cast<R>(Value);
#endif
}

template <rounding_mode Mode>
using RteOrAutomatic = detail::bool_constant<Mode == rounding_mode::automatic || Mode == rounding_mode::rte>;

template <rounding_mode Mode>
using Rtz = detail::bool_constant<Mode == rounding_mode::rtz>;

template <rounding_mode Mode>
using Rtp = detail::bool_constant<Mode == rounding_mode::rtp>;

template <rounding_mode Mode>
using Rtn = detail::bool_constant<Mode == rounding_mode::rtn>;

#define __SYCL_GENERATE_CONVERT_IMPL(SPIRVOp, DestType, RoundingMode, RoundingModeCondition) \
template <typename T, typename R, rounding_mode roundingMode>\
detail::enable_if_t<is_float_to_int<T, R>::value && \
std::is_same<R, DestType>::value && \
RoundingModeCondition<roundingMode>::value, \
R> \
convertImpl(T Value) { \
using OpenCLT = cl::sycl::detail::ConvertToOpenCLType_t<T>; \
OpenCLT OpValue = cl::sycl::detail::convertDataToType<T, OpenCLT>(Value); \
return __spirv_Convert##SPIRVOp##_R##DestType##_##RoundingMode(OpValue); \
} \

#define __SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE(RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToS, int, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToS, char, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToS, short, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToS, long, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToU, uint, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToU, uchar, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToU, ushort, RoundingMode, RoundingModeCondition) \
__SYCL_GENERATE_CONVERT_IMPL(FToU, ulong, RoundingMode, RoundingModeCondition) \

__SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE(rte, RteOrAutomatic)
__SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE(rtz, Rtz)
__SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE(rtp, Rtp)
__SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE(rtn, Rtn)


#undef __SYCL_GENERATE_CONVERT_IMPL_FOR_ROUNDING_MODE
#undef __SYCL_GENERATE_CONVERT_IMPL

#endif

} // namespace detail

#if defined(_WIN32) && (_MSC_VER)
Expand Down
8 changes: 4 additions & 4 deletions sycl/test/basic_tests/vec_convert.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
// RUN: env SYCL_DEVICE_TYPE=HOST %t.out
// RUNx: %CPU_RUN_PLACEHOLDER %t.out
// RUNx: %GPU_RUN_PLACEHOLDER %t.out
// RUNx: %ACC_RUN_PLACEHOLDER %t.out
// RUN: %CPU_RUN_PLACEHOLDER %t.out
// RUN: %GPU_RUN_PLACEHOLDER %t.out
// RUN: %ACC_RUN_PLACEHOLDER %t.out
//==------------ vec_convert.cpp - SYCL vec class convert method test ------==//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
Expand Down Expand Up @@ -149,6 +149,6 @@ int main() {
test<float, half, 8, rounding_mode::rtn>(
float8{+2.3f, +2.5f, +2.7f, -2.3f, -2.5f, -2.7f, 0.f, 0.f},
half8{+2.3f, +2.5f, +2.7f, -2.3f, -2.5f, -2.7f, 0.f, 0.f});

return 0;
}