summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenOpenCL
diff options
context:
space:
mode:
authorKevin Petit <kevin.petit@arm.com>2019-05-24 14:53:52 +0000
committerKevin Petit <kevin.petit@arm.com>2019-05-24 14:53:52 +0000
commitaa7754cc9038b2c8a2bf1fb0e3a148f94cf4e8c5 (patch)
tree93ddf9a0885070dbe80cf4b592b1b237fe4eb8f1 /clang/test/CodeGenOpenCL
parentc0ea5b2d514d33fe045087976b2009c0462a610c (diff)
downloadbcm5719-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.cl38
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
+
OpenPOWER on IntegriCloud