diff options
| author | Kevin Petit <kevin.petit@arm.com> | 2019-05-24 14:53:52 +0000 |
|---|---|---|
| committer | Kevin Petit <kevin.petit@arm.com> | 2019-05-24 14:53:52 +0000 |
| commit | aa7754cc9038b2c8a2bf1fb0e3a148f94cf4e8c5 (patch) | |
| tree | 93ddf9a0885070dbe80cf4b592b1b237fe4eb8f1 /clang/test/CodeGenOpenCL | |
| parent | c0ea5b2d514d33fe045087976b2009c0462a610c (diff) | |
| download | bcm5719-llvm-aa7754cc9038b2c8a2bf1fb0e3a148f94cf4e8c5.tar.gz bcm5719-llvm-aa7754cc9038b2c8a2bf1fb0e3a148f94cf4e8c5.zip | |
[OpenCL] Add support for the cl_arm_integer_dot_product extensions
The specification is available in the Khronos OpenCL registry:
https://www.khronos.org/registry/OpenCL/extensions/arm/cl_arm_integer_dot_product.txt
Signed-off-by: Kevin Petit <kevin.petit@arm.com>
llvm-svn: 361641
Diffstat (limited to 'clang/test/CodeGenOpenCL')
| -rw-r--r-- | clang/test/CodeGenOpenCL/arm-integer-dot-product.cl | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/clang/test/CodeGenOpenCL/arm-integer-dot-product.cl b/clang/test/CodeGenOpenCL/arm-integer-dot-product.cl new file mode 100644 index 00000000000..d1ab6aceac5 --- /dev/null +++ b/clang/test/CodeGenOpenCL/arm-integer-dot-product.cl @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 %s -triple spir-unknown-unknown -finclude-default-header -cl-std=CL1.2 -emit-llvm -o - -O0 | FileCheck %s + +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_int8 : enable +void test_int8(uchar4 ua, uchar4 ub, char4 sa, char4 sb) { + uint ur = arm_dot(ua, ub); + // CHECK: call spir_func i32 @_Z7arm_dotDv4_hS_ + int sr = arm_dot(sa, sb); + // CHECK: call spir_func i32 @_Z7arm_dotDv4_cS_ +} +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_int8 : disable + +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_accumulate_int8 : enable +void test_accumulate_int8(uchar4 ua, uchar4 ub, uint uc, char4 sa, char4 sb, int c) { + uint ur = arm_dot_acc(ua, ub, uc); + // CHECK: call spir_func i32 @_Z11arm_dot_accDv4_hS_j + int sr = arm_dot_acc(sa, sb, c); + // CHECK: call spir_func i32 @_Z11arm_dot_accDv4_cS_i +} +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_accumulate_int8 : disable + +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_accumulate_int16 : enable +void test_accumulate_int16(ushort2 ua, ushort2 ub, uint uc, short2 sa, short2 sb, int c) { + uint ur = arm_dot_acc(ua, ub, uc); + // CHECK: call spir_func i32 @_Z11arm_dot_accDv2_tS_j + int sr = arm_dot_acc(sa, sb, c); + // CHECK: call spir_func i32 @_Z11arm_dot_accDv2_sS_i +} +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_accumulate_int16 : disable + +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_accumulate_saturate_int8 : enable +void test_accumulate_saturate_int8(uchar4 ua, uchar4 ub, uint uc, char4 sa, char4 sb, int c) { + uint ur = arm_dot_acc_sat(ua, ub, uc); + // CHECK: call spir_func i32 @_Z15arm_dot_acc_satDv4_hS_j + int sr = arm_dot_acc_sat(sa, sb, c); + // CHECK: call spir_func i32 @_Z15arm_dot_acc_satDv4_cS_i +} +#pragma OPENCL EXTENSION cl_arm_integer_dot_product_accumulate_saturate_int8 : disable + |

