3
3
; RUN: spirv-val %t.spv
4
4
; RUN: llvm-spirv %t.spv -to-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV
5
5
; RUN: llvm-spirv %t.spv -r -o %t.rev.bc
6
- ; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefix=CHECK-LLVM
6
+ ; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefixes=CHECK-LLVM,CHECK-LLVM-OCL
7
+ ; RUN: llvm-spirv %t.spv -r --spirv-target-env=SPV-IR -o %t.rev.bc
8
+ ; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefixes=CHECK-LLVM,CHECK-LLVM-SPV
7
9
8
10
; The IR was generated from the following source:
9
11
; #include <CL/sycl.hpp>
39
41
; CHECK-SPIRV: Decorate [[GlobalOffset]] LinkageAttributes "__spirv_BuiltInGlobalOffset" Import
40
42
; CHECK-SPIRV: Decorate [[GlobalSize]] LinkageAttributes "__spirv_BuiltInGlobalSize" Import
41
43
; CHECK-SPIRV: Decorate [[GlobalInvocationId]] LinkageAttributes "__spirv_BuiltInGlobalInvocationId" Import
44
+ ;
45
+ ; CHECK-LLVM-NOT: addrspacecast <3 x 64> addrspace(1)* @__spirv_BuiltInGlobalInvocationId to <3 x 64> addrspace(4)*
46
+ ; CHECK-LLVM-NOT: load <3 x i64>
47
+ ; CHECK-LLVM-OCL: %[[Id0:[0-9]+]] = call spir_func i64 @_Z13get_global_idj(i32 0) #1
48
+ ; CHECK-LLVM-SPV: %[[Id0:[0-9]+]] = call spir_func i64 @_Z33__spirv_BuiltInGlobalInvocationIdi(i32 0) #1
49
+ ; CHECK-LLVM: %[[FirstVec:[0-9]+]] = insertelement <3 x i64> undef, i64 %[[Id0]], i32 0
50
+ ; CHECK-LLVM-OCL: %[[Id1:[0-9]+]] = call spir_func i64 @_Z13get_global_idj(i32 1) #1
51
+ ; CHECK-LLVM-SPV: %[[Id1:[0-9]+]] = call spir_func i64 @_Z33__spirv_BuiltInGlobalInvocationIdi(i32 1) #1
52
+ ; CHECK-LLVM: %[[SecondVec:[0-9]+]] = insertelement <3 x i64> %[[FirstVec]], i64 %[[Id1]], i32 1
53
+ ; CHECK-LLVM-OCL: %[[Id2:[0-9]+]] = call spir_func i64 @_Z13get_global_idj(i32 2) #1
54
+ ; CHECK-LLVM-SPV: %[[Id2:[0-9]+]] = call spir_func i64 @_Z33__spirv_BuiltInGlobalInvocationIdi(i32 2) #1
55
+ ; CHECK-LLVM: %[[GlobIdVec:[0-9]+]] = insertelement <3 x i64> %[[SecondVec]], i64 %[[Id2]], i32 2
56
+ ; CHECK-LLVM: %{{[0-9]+}} = extractelement <3 x i64> %[[GlobIdVec]], i32 1
57
+ ; CHECK-LLVM: %{{[0-9]+}} = extractelement <3 x i64> %[[GlobIdVec]], i32 0
58
+ ; CHECK-LLVM-NOT: addrspacecast <3 x 64> addrspace(1)* @__spirv_BuiltInGlobalSize to <3 x 64> addrspace(4)*
59
+ ; CHECK-LLVM-NOT: load <3 x i64>
60
+ ; CHECK-LLVM-NOT: addrspacecast <3 x 64> addrspace(1)* @__spirv_BuiltInGlobalOffset to <3 x 64> addrspace(4)*
61
+ ; CHECK-LLVM-NOT: load <3 x i64>
62
+ ; CHECK-LLVM-OCL: %[[GOffset0:[0-9]+]] = call spir_func i64 @_Z17get_global_offsetj(i32 0) #1
63
+ ; CHECK-LLVM-SPV: %[[GOffset0:[0-9]+]] = call spir_func i64 @_Z25__spirv_BuiltInGlobalSizei(i32 0) #1
64
+ ; CHECK-LLVM: %[[FirstVec2:[0-9]+]] = insertelement <3 x i64> undef, i64 %[[GOffset0]], i32 0
65
+ ; CHECK-LLVM-OCL: %[[GOffset1:[0-9]+]] = call spir_func i64 @_Z17get_global_offsetj(i32 1) #1
66
+ ; CHECK-LLVM-SPV: %[[GOffset1:[0-9]+]] = call spir_func i64 @_Z25__spirv_BuiltInGlobalSizei(i32 1) #1
67
+ ; CHECK-LLVM: %[[SecondVec2:[0-9]+]] = insertelement <3 x i64> %[[FirstVec2]], i64 %[[GOffset1]], i32 1
68
+ ; CHECK-LLVM-OCL: %[[GOffset2:[0-9]+]] = call spir_func i64 @_Z17get_global_offsetj(i32 2) #1
69
+ ; CHECK-LLVM-SPV: %[[GOffset2:[0-9]+]] = call spir_func i64 @_Z25__spirv_BuiltInGlobalSizei(i32 2) #1
70
+ ; CHECK-LLVM: %[[GOffsetVec:[0-9]+]] = insertelement <3 x i64> %[[SecondVec2]], i64 %[[GOffset2]], i32 2
71
+ ; CHECK-LLVM %20 = sub <3 x i64> %[[GlobSizeVec]], %[[GOffsetVec]]
72
+ ; CHECK-LLVM %21 = sub <3 x i64> %[[GlobSizeVec]], %[[GOffSetVec]]
42
73
43
74
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
44
75
target triple = "spir64-unknown-linux-sycldevice"
@@ -62,33 +93,11 @@ entry:
62
93
%agg.tmp5.sroa.0.sroa.0.0.copyload = load i64 , i64* %agg.tmp5.sroa.0.sroa.0.0.agg.tmp5.sroa.0.0..sroa_cast.sroa_idx , align 8
63
94
%agg.tmp5.sroa.0.sroa.2.0.agg.tmp5.sroa.0.0..sroa_cast.sroa_idx69 = getelementptr inbounds %"class._ZTSN2cl4sycl2idILi2EEE.cl::sycl::id" , %"class._ZTSN2cl4sycl2idILi2EEE.cl::sycl::id" * %_arg_3 , i64 0 , i32 0 , i32 0 , i64 1
64
95
%agg.tmp5.sroa.0.sroa.2.0.copyload = load i64 , i64* %agg.tmp5.sroa.0.sroa.2.0.agg.tmp5.sroa.0.0..sroa_cast.sroa_idx69 , align 8
65
- ; CHECK-LLVM-NOT: addrspacecast <3 x 64> addrspace(1)* @__spirv_BuiltInGlobalInvocationId to <3 x 64> addrspace(4)*
66
- ; CHECK-LLVM-NOT: load <3 x i64>
67
- ; CHECK-LLVM: %[[Id0:[0-9]+]] = call spir_func i64 @_Z13get_global_idj(i32 0) #1
68
- ; CHECK-LLVM: %[[FirstVec:[0-9]+]] = insertelement <3 x i64> undef, i64 %[[Id0]], i32 0
69
- ; CHECK-LLVM: %[[Id1:[0-9]+]] = call spir_func i64 @_Z13get_global_idj(i32 1) #1
70
- ; CHECK-LLVM: %[[SecondVec:[0-9]+]] = insertelement <3 x i64> %[[FirstVec]], i64 %[[Id1]], i32 1
71
- ; CHECK-LLVM: %[[Id2:[0-9]+]] = call spir_func i64 @_Z13get_global_idj(i32 2) #1
72
- ; CHECK-LLVM: %[[GlobIdVec:[0-9]+]] = insertelement <3 x i64> %[[SecondVec]], i64 %[[Id2]], i32 2
73
96
%0 = load <3 x i64 >, <3 x i64 > addrspace (4 )* addrspacecast (<3 x i64 > addrspace (1 )* @__spirv_BuiltInGlobalInvocationId to <3 x i64 > addrspace (4 )*), align 32
74
- ; CHECK-LLVM: %{{[0-9]+}} = extractelement <3 x i64> %[[GlobIdVec]], i32 1
75
- ; CHECK-LLVM: %{{[0-9]+}} = extractelement <3 x i64> %[[GlobIdVec]], i32 0
76
97
%1 = extractelement <3 x i64 > %0 , i64 1
77
98
%2 = extractelement <3 x i64 > %0 , i64 0
78
- ; CHECK-LLVM-NOT: addrspacecast <3 x 64> addrspace(1)* @__spirv_BuiltInGlobalSize to <3 x 64> addrspace(4)*
79
- ; CHECK-LLVM-NOT: load <3 x i64>
80
99
%3 = load <3 x i64 >, <3 x i64 > addrspace (4 )* addrspacecast (<3 x i64 > addrspace (1 )* @__spirv_BuiltInGlobalSize to <3 x i64 > addrspace (4 )*), align 32
81
- ; CHECK-LLVM-NOT: addrspacecast <3 x 64> addrspace(1)* @__spirv_BuiltInGlobalOffset to <3 x 64> addrspace(4)*
82
- ; CHECK-LLVM-NOT: load <3 x i64>
83
- ; CHECK-LLVM: %[[GOffset0:[0-9]+]] = call spir_func i64 @_Z17get_global_offsetj(i32 0) #1
84
- ; CHECK-LLVM: %[[FirstVec2:[0-9]+]] = insertelement <3 x i64> undef, i64 %[[GOffset0]], i32 0
85
- ; CHECK-LLVM: %[[GOffset1:[0-9]+]] = call spir_func i64 @_Z17get_global_offsetj(i32 1) #1
86
- ; CHECK-LLVM: %[[SecondVec2:[0-9]+]] = insertelement <3 x i64> %[[FirstVec2]], i64 %[[GOffset1]], i32 1
87
- ; CHECK-LLVM: %[[GOffset2:[0-9]+]] = call spir_func i64 @_Z17get_global_offsetj(i32 2) #1
88
- ; CHECK-LLVM: %[[GOffsetVec:[0-9]+]] = insertelement <3 x i64> %[[SecondVec2]], i64 %[[GOffset2]], i32 2
89
100
%4 = load <3 x i64 >, <3 x i64 > addrspace (4 )* addrspacecast (<3 x i64 > addrspace (1 )* @__spirv_BuiltInGlobalOffset to <3 x i64 > addrspace (4 )*), align 32
90
- ; CHECK-LLVM %20 = sub <3 x i64> %[[GlobSizeVec]], %[[GOffsetVec]]
91
- ; CHECK-LLVM %21 = sub <3 x i64> %[[GlobSizeVec]], %[[GOffSetVec]]
92
101
%5 = sub <3 x i64 > %0 , %4
93
102
%6 = sub <3 x i64 > %0 , %4
94
103
%7 = extractelement <3 x i64 > %6 , i64 0
0 commit comments