|
| 1 | +// REQUIRES: spirv-dis |
| 2 | +// RUN: %clang_cc1 -triple spir-unknown-unknown -O1 -cl-std=CL2.0 -fdeclare-opencl-builtins -finclude-default-header -emit-llvm-bc %s -o %t.bc |
| 3 | +// RUN: llvm-spirv %t.bc --spirv-ext=+SPV_KHR_shader_clock -o %t.spv |
| 4 | +// RUN: spirv-dis %t.spv -o - | FileCheck %s --check-prefix=CHECK-SPIRV |
| 5 | +// TODO: spirv-val %t.spv |
| 6 | +// RUN: llvm-spirv -r %t.spv -o %t.rev.bc |
| 7 | +// RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM |
| 8 | +// RUN: llvm-spirv -r --spirv-target-env=SPV-IR %t.spv -o %t.rev.bc |
| 9 | +// RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-SPV-IR |
| 10 | + |
| 11 | +// CHECK-SPIRV: OpCapability ShaderClockKHR |
| 12 | +// CHECK-SPIRV: OpExtension "SPV_KHR_shader_clock" |
| 13 | +// CHECK-SPIRV-DAG: [[uint:%[a-z0-9_]+]] = OpTypeInt 32 |
| 14 | +// CHECK-SPIRV-DAG: [[ulong:%[a-z0-9_]+]] = OpTypeInt 64 |
| 15 | +// CHECK-SPIRV-DAG: [[v2uint:%[a-z0-9_]+]] = OpTypeVector [[uint]] 2 |
| 16 | +// CHECK-SPIRV-DAG: [[uint_1:%[a-z0-9_]+]] = OpConstant [[uint]] 1 |
| 17 | +// CHECK-SPIRV-DAG: [[uint_2:%[a-z0-9_]+]] = OpConstant [[uint]] 2 |
| 18 | +// CHECK-SPIRV-DAG: [[uint_3:%[a-z0-9_]+]] = OpConstant [[uint]] 3 |
| 19 | +// CHECK-SPIRV: OpReadClockKHR [[ulong]] [[uint_1]] |
| 20 | +// CHECK-SPIRV: OpReadClockKHR [[ulong]] [[uint_2]] |
| 21 | +// CHECK-SPIRV: OpReadClockKHR [[ulong]] [[uint_3]] |
| 22 | +// CHECK-SPIRV: OpReadClockKHR [[v2uint]] [[uint_1]] |
| 23 | +// CHECK-SPIRV: OpReadClockKHR [[v2uint]] [[uint_2]] |
| 24 | +// CHECK-SPIRV: OpReadClockKHR [[v2uint]] [[uint_3]] |
| 25 | + |
| 26 | +// CHECK-LLVM-LABEL: test_clocks |
| 27 | +// CHECK-LLVM: call spir_func i64 @_Z17clock_read_devicev() |
| 28 | +// CHECK-LLVM: call spir_func i64 @_Z21clock_read_work_groupv() |
| 29 | +// CHECK-LLVM: call spir_func i64 @_Z20clock_read_sub_groupv() |
| 30 | +// CHECK-LLVM: call spir_func <2 x i32> @_Z22clock_read_hilo_devicev() |
| 31 | +// CHECK-LLVM: call spir_func <2 x i32> @_Z26clock_read_hilo_work_groupv() |
| 32 | +// CHECK-LLVM: call spir_func <2 x i32> @_Z25clock_read_hilo_sub_groupv() |
| 33 | + |
| 34 | +// CHECK-SPV-IR-LABEL: test_clocks |
| 35 | +// CHECK-SPV-IR: call spir_func i64 @_Z27__spirv_ReadClockKHR_Rulongi(i32 1) |
| 36 | +// CHECK-SPV-IR: call spir_func i64 @_Z27__spirv_ReadClockKHR_Rulongi(i32 2) |
| 37 | +// CHECK-SPV-IR: call spir_func i64 @_Z27__spirv_ReadClockKHR_Rulongi(i32 3) |
| 38 | +// CHECK-SPV-IR: call spir_func <2 x i32> @_Z27__spirv_ReadClockKHR_Ruint2i(i32 1) |
| 39 | +// CHECK-SPV-IR: call spir_func <2 x i32> @_Z27__spirv_ReadClockKHR_Ruint2i(i32 2) |
| 40 | +// CHECK-SPV-IR: call spir_func <2 x i32> @_Z27__spirv_ReadClockKHR_Ruint2i(i32 3) |
| 41 | + |
| 42 | +kernel void test_clocks(global ulong *out64, global uint2 *outv2) { |
| 43 | + out64[0] = clock_read_device(); |
| 44 | + out64[1] = clock_read_work_group(); |
| 45 | + out64[2] = clock_read_sub_group(); |
| 46 | + |
| 47 | + outv2[0] = clock_read_hilo_device(); |
| 48 | + outv2[1] = clock_read_hilo_work_group(); |
| 49 | + outv2[2] = clock_read_hilo_sub_group(); |
| 50 | +} |
0 commit comments