From cf70d1f05ca716d88a58b6f64cbc7be2621fafbe Mon Sep 17 00:00:00 2001 From: Stuart Brady Date: Tue, 27 Aug 2019 18:23:57 +0100 Subject: [PATCH] Add OpConvertPtrToU and OpConvertUToPtr tests --- test/OpConvertPtrToU_narrowing.spvasm | 27 +++++++++++++++++++++++++++ test/OpConvertPtrToU_widening.spvasm | 27 +++++++++++++++++++++++++++ test/OpConvertUToPtr_narrowing.spvasm | 25 +++++++++++++++++++++++++ test/OpConvertUToPtr_widening.spvasm | 25 +++++++++++++++++++++++++ test/transcoding/ConvertPtr.cl | 17 ++++++++++++++--- 5 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 test/OpConvertPtrToU_narrowing.spvasm create mode 100644 test/OpConvertPtrToU_widening.spvasm create mode 100644 test/OpConvertUToPtr_narrowing.spvasm create mode 100644 test/OpConvertUToPtr_widening.spvasm diff --git a/test/OpConvertPtrToU_narrowing.spvasm b/test/OpConvertPtrToU_narrowing.spvasm new file mode 100644 index 0000000000..7b53ed3b22 --- /dev/null +++ b/test/OpConvertPtrToU_narrowing.spvasm @@ -0,0 +1,27 @@ +; REQUIRES: spirv-as +; RUN: spirv-as --target-env spv1.0 -o %t.spv %s +; RUN: llvm-spirv -r -o - %t.spv | llvm-dis | FileCheck %s + OpCapability Addresses + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %1 "testNarrowingPtrToU" + OpName %a "a" + OpName %res "res" + OpName %entry "entry" + %uint = OpTypeInt 32 0 + %ushort = OpTypeInt 16 0 + %void = OpTypeVoid +%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint +%_ptr_CrossWorkgroup_ushort = OpTypePointer CrossWorkgroup %ushort + %17 = OpTypeFunction %void %_ptr_CrossWorkgroup_uint %_ptr_CrossWorkgroup_ushort + %1 = OpFunction %void None %17 + %a = OpFunctionParameter %_ptr_CrossWorkgroup_uint + %res = OpFunctionParameter %_ptr_CrossWorkgroup_ushort + %entry = OpLabel + %18 = OpConvertPtrToU %ushort %a + OpStore %res %18 Aligned 2 + OpReturn + OpFunctionEnd + +; CHECK: ptrtoint i32 addrspace(1)* %a to i16 diff --git a/test/OpConvertPtrToU_widening.spvasm b/test/OpConvertPtrToU_widening.spvasm new file mode 100644 index 0000000000..29151b5845 --- /dev/null +++ b/test/OpConvertPtrToU_widening.spvasm @@ -0,0 +1,27 @@ +; REQUIRES: spirv-as +; RUN: spirv-as --target-env spv1.0 -o %t.spv %s +; RUN: llvm-spirv -r -o - %t.spv | llvm-dis | FileCheck %s + OpCapability Addresses + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %1 "testWideningPtrToU" + OpName %a "a" + OpName %res "res" + OpName %entry "entry" + %uint = OpTypeInt 32 0 + %ulong = OpTypeInt 64 0 + %void = OpTypeVoid +%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint +%_ptr_CrossWorkgroup_ulong = OpTypePointer CrossWorkgroup %ulong + %17 = OpTypeFunction %void %_ptr_CrossWorkgroup_uint %_ptr_CrossWorkgroup_ulong + %1 = OpFunction %void None %17 + %a = OpFunctionParameter %_ptr_CrossWorkgroup_uint + %res = OpFunctionParameter %_ptr_CrossWorkgroup_ulong + %entry = OpLabel + %18 = OpConvertPtrToU %ulong %a + OpStore %res %18 Aligned 8 + OpReturn + OpFunctionEnd + +; CHECK: ptrtoint i32 addrspace(1)* %a to i64 diff --git a/test/OpConvertUToPtr_narrowing.spvasm b/test/OpConvertUToPtr_narrowing.spvasm new file mode 100644 index 0000000000..10ac6dc719 --- /dev/null +++ b/test/OpConvertUToPtr_narrowing.spvasm @@ -0,0 +1,25 @@ +; REQUIRES: spirv-as +; RUN: spirv-as --target-env spv1.0 -o %t.spv %s +; RUN: llvm-spirv -r -o - %t.spv | llvm-dis | FileCheck %s + OpCapability Addresses + OpCapability Kernel + OpCapability Int64 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %1 "testNarrowingUToPtr" + OpName %a "a" + OpName %entry "entry" + %uint = OpTypeInt 32 0 + %uint_0 = OpConstant %uint 0 + %ulong = OpTypeInt 64 0 + %void = OpTypeVoid +%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint + %9 = OpTypeFunction %void %ulong + %1 = OpFunction %void None %9 + %a = OpFunctionParameter %ulong + %entry = OpLabel + %10 = OpConvertUToPtr %_ptr_CrossWorkgroup_uint %a + OpStore %10 %uint_0 Aligned 4 + OpReturn + OpFunctionEnd + +; CHECK: inttoptr i64 %a to i32 addrspace(1)* diff --git a/test/OpConvertUToPtr_widening.spvasm b/test/OpConvertUToPtr_widening.spvasm new file mode 100644 index 0000000000..93da43843e --- /dev/null +++ b/test/OpConvertUToPtr_widening.spvasm @@ -0,0 +1,25 @@ +; REQUIRES: spirv-as +; RUN: spirv-as --target-env spv1.0 -o %t.spv %s +; RUN: llvm-spirv -r -o - %t.spv | llvm-dis | FileCheck %s + OpCapability Addresses + OpCapability Kernel + OpCapability Int16 + OpMemoryModel Physical32 OpenCL + OpEntryPoint Kernel %1 "testWideningUToPtr" + OpName %a "a" + OpName %entry "entry" + %uint = OpTypeInt 32 0 + %uint_0 = OpConstant %uint 0 + %ushort = OpTypeInt 16 0 + %void = OpTypeVoid +%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint + %9 = OpTypeFunction %void %ushort + %1 = OpFunction %void None %9 + %a = OpFunctionParameter %ushort + %entry = OpLabel + %10 = OpConvertUToPtr %_ptr_CrossWorkgroup_uint %a + OpStore %10 %uint_0 Aligned 4 + OpReturn + OpFunctionEnd + +; CHECK: inttoptr i16 %a to i32 addrspace(1)* diff --git a/test/transcoding/ConvertPtr.cl b/test/transcoding/ConvertPtr.cl index 14f4873189..8f4bf2562b 100644 --- a/test/transcoding/ConvertPtr.cl +++ b/test/transcoding/ConvertPtr.cl @@ -5,12 +5,23 @@ // RUN: llvm-spirv -r %t.spv -o %t.rev.bc // RUN: llvm-dis < %t.rev.bc | FileCheck %s --check-prefix=CHECK-LLVM -kernel void test(global int *a, global unsigned long *res) { +kernel void testConvertPtrToU(global int *a, global unsigned long *res) { res[0] = (unsigned long)&a[0]; } -// CHECK-SPIRV: ConvertPtrToU +// CHECK-SPIRV: 4 ConvertPtrToU -// CHECK-LLVM-LABEL: @test +// CHECK-LLVM-LABEL: @testConvertPtrToU // CHECK-LLVM: %0 = ptrtoint i32 addrspace(1)* %a to i32 // CHECK-LLVM: zext i32 %0 to i64 + +kernel void testConvertUToPtr(unsigned long a) { + global unsigned int *res = (global unsigned int *)a; + res[0] = 0; +} + +// CHECK-SPIRV: 4 ConvertUToPtr + +// CHECK-LLVM-LABEL: @testConvertUToPtr +// CHECK-LLVM: %[[Conv:[a-z]+]] = trunc i64 %a to i32 +// CHECK-LLVM: inttoptr i32 %[[Conv]] to i32 addrspace(1)*