Skip to content

Commit

Permalink
Add OpConvertPtrToU and OpConvertUToPtr tests
Browse files Browse the repository at this point in the history
  • Loading branch information
StuartDBrady authored and svenvh committed Sep 16, 2019
1 parent 9ed3c9d commit cf70d1f
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 3 deletions.
27 changes: 27 additions & 0 deletions test/OpConvertPtrToU_narrowing.spvasm
Original file line number Diff line number Diff line change
@@ -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
27 changes: 27 additions & 0 deletions test/OpConvertPtrToU_widening.spvasm
Original file line number Diff line number Diff line change
@@ -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
25 changes: 25 additions & 0 deletions test/OpConvertUToPtr_narrowing.spvasm
Original file line number Diff line number Diff line change
@@ -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)*
25 changes: 25 additions & 0 deletions test/OpConvertUToPtr_widening.spvasm
Original file line number Diff line number Diff line change
@@ -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)*
17 changes: 14 additions & 3 deletions test/transcoding/ConvertPtr.cl
Original file line number Diff line number Diff line change
Expand Up @@ -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)*

0 comments on commit cf70d1f

Please sign in to comment.