xref: /llvm-project/llvm/test/CodeGen/SPIRV/transcoding/OpImageQuerySize.ll (revision ec7baca17e78d47c1571d1c06b95f920562293da)
1*ec7baca1SMichal Paszkowski; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2f20c9c42SAndrey Tretyakov
3f20c9c42SAndrey Tretyakov;; Check conversion of get_image_width, get_image_height, get_image_depth,
4f20c9c42SAndrey Tretyakov;; get_image_array_size, and get_image_dim OCL built-ins.
5f20c9c42SAndrey Tretyakov;; In general the SPRI-V reader converts OpImageQuerySize into get_image_dim
6f20c9c42SAndrey Tretyakov;; and subsequent extract or shufflevector instructions. Unfortunately there is
7f20c9c42SAndrey Tretyakov;; no get_image_dim for 1D images and get_image_dim cannot replace get_image_array_size
8f20c9c42SAndrey Tretyakov
9f20c9c42SAndrey Tretyakov; CHECK-SPIRV: %[[#ArrayTypeID:]] = OpTypeImage %[[#]] 1D 0 1 0 0 Unknown ReadOnly
10f20c9c42SAndrey Tretyakov
11f20c9c42SAndrey Tretyakov; CHECK-SPIRV:     %[[#ArrayVarID:]] = OpFunctionParameter %[[#ArrayTypeID]]
12f20c9c42SAndrey Tretyakov; CHECK-SPIRV:     %[[#]] = OpImageQuerySizeLod %[[#]] %[[#ArrayVarID]]
13f20c9c42SAndrey Tretyakov; CHECK-SPIRV-NOT: %[[#]] = OpExtInst %[[#]] %[[#]] get_image_array_size
14f20c9c42SAndrey Tretyakov
15*ec7baca1SMichal Paszkowskidefine spir_kernel void @test_image1d(i32 addrspace(1)* nocapture %sizes, target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0) %img, target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 0) %buffer, target("spirv.Image", void, 0, 0, 1, 0, 0, 0, 0) %array) {
16*ec7baca1SMichal Paszkowski  %1 = tail call spir_func i32 @_Z15get_image_width14ocl_image1d_ro(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0) %img)
17*ec7baca1SMichal Paszkowski  %2 = tail call spir_func i32 @_Z15get_image_width21ocl_image1d_buffer_ro(target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 0) %buffer)
18*ec7baca1SMichal Paszkowski  %3 = tail call spir_func i32 @_Z15get_image_width20ocl_image1d_array_ro(target("spirv.Image", void, 0, 0, 1, 0, 0, 0, 0) %array)
19*ec7baca1SMichal Paszkowski  %4 = tail call spir_func i64 @_Z20get_image_array_size20ocl_image1d_array_ro(target("spirv.Image", void, 0, 0, 1, 0, 0, 0, 0) %array)
20f20c9c42SAndrey Tretyakov  %5 = trunc i64 %4 to i32
21f20c9c42SAndrey Tretyakov  %6 = add nsw i32 %2, %1
22f20c9c42SAndrey Tretyakov  %7 = add nsw i32 %6, %3
23f20c9c42SAndrey Tretyakov  %8 = add nsw i32 %7, %5
24f20c9c42SAndrey Tretyakov  store i32 %8, i32 addrspace(1)* %sizes, align 4
25f20c9c42SAndrey Tretyakov  ret void
26f20c9c42SAndrey Tretyakov}
27f20c9c42SAndrey Tretyakov
28*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width14ocl_image1d_ro(target("spirv.Image", void, 0, 0, 0, 0, 0, 0, 0))
29f20c9c42SAndrey Tretyakov
30*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width21ocl_image1d_buffer_ro(target("spirv.Image", void, 5, 0, 0, 0, 0, 0, 0))
31f20c9c42SAndrey Tretyakov
32*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width20ocl_image1d_array_ro(target("spirv.Image", void, 0, 0, 1, 0, 0, 0, 0))
33f20c9c42SAndrey Tretyakov
34*ec7baca1SMichal Paszkowskideclare spir_func i64 @_Z20get_image_array_size20ocl_image1d_array_ro(target("spirv.Image", void, 0, 0, 1, 0, 0, 0, 0))
35f20c9c42SAndrey Tretyakov
36*ec7baca1SMichal Paszkowskidefine spir_kernel void @test_image2d(i32 addrspace(1)* nocapture %sizes, target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0) %img, target("spirv.Image", void, 1, 1, 0, 0, 0, 0, 0) %img_depth, target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0) %array, target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0) %array_depth) {
37*ec7baca1SMichal Paszkowski  %1 = tail call spir_func i32 @_Z15get_image_width14ocl_image2d_ro(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0) %img)
38*ec7baca1SMichal Paszkowski  %2 = tail call spir_func i32 @_Z16get_image_height14ocl_image2d_ro(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0) %img)
39*ec7baca1SMichal Paszkowski  %3 = tail call spir_func <2 x i32> @_Z13get_image_dim14ocl_image2d_ro(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0) %img)
40*ec7baca1SMichal Paszkowski  %4 = tail call spir_func i32 @_Z15get_image_width20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0) %array)
41*ec7baca1SMichal Paszkowski  %5 = tail call spir_func i32 @_Z16get_image_height20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0) %array)
42*ec7baca1SMichal Paszkowski  %6 = tail call spir_func i64 @_Z20get_image_array_size20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0) %array)
43f20c9c42SAndrey Tretyakov  %7 = trunc i64 %6 to i32
44*ec7baca1SMichal Paszkowski  %8 = tail call spir_func <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0) %array)
45f20c9c42SAndrey Tretyakov  %9 = add nsw i32 %2, %1
46f20c9c42SAndrey Tretyakov  %10 = extractelement <2 x i32> %3, i32 0
47f20c9c42SAndrey Tretyakov  %11 = add nsw i32 %9, %10
48f20c9c42SAndrey Tretyakov  %12 = extractelement <2 x i32> %3, i32 1
49f20c9c42SAndrey Tretyakov  %13 = add nsw i32 %11, %12
50f20c9c42SAndrey Tretyakov  %14 = add nsw i32 %13, %4
51f20c9c42SAndrey Tretyakov  %15 = add nsw i32 %14, %5
52f20c9c42SAndrey Tretyakov  %16 = add nsw i32 %15, %7
53f20c9c42SAndrey Tretyakov  %17 = extractelement <2 x i32> %8, i32 0
54f20c9c42SAndrey Tretyakov  %18 = add nsw i32 %16, %17
55f20c9c42SAndrey Tretyakov  %19 = extractelement <2 x i32> %8, i32 1
56f20c9c42SAndrey Tretyakov  %20 = add nsw i32 %18, %19
57f20c9c42SAndrey Tretyakov  store i32 %20, i32 addrspace(1)* %sizes, align 4
58f20c9c42SAndrey Tretyakov  ret void
59f20c9c42SAndrey Tretyakov}
60f20c9c42SAndrey Tretyakov
61*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width14ocl_image2d_ro(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0))
62f20c9c42SAndrey Tretyakov
63*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z16get_image_height14ocl_image2d_ro(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0))
64f20c9c42SAndrey Tretyakov
65*ec7baca1SMichal Paszkowskideclare spir_func <2 x i32> @_Z13get_image_dim14ocl_image2d_ro(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 0))
66f20c9c42SAndrey Tretyakov
67*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0))
68f20c9c42SAndrey Tretyakov
69*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z16get_image_height20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0))
70f20c9c42SAndrey Tretyakov
71*ec7baca1SMichal Paszkowskideclare spir_func i64 @_Z20get_image_array_size20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0))
72f20c9c42SAndrey Tretyakov
73*ec7baca1SMichal Paszkowskideclare spir_func <2 x i32> @_Z13get_image_dim20ocl_image2d_array_ro(target("spirv.Image", void, 1, 0, 1, 0, 0, 0, 0))
74f20c9c42SAndrey Tretyakov
75*ec7baca1SMichal Paszkowskidefine spir_kernel void @test_image3d(i32 addrspace(1)* nocapture %sizes, target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %img) {
76*ec7baca1SMichal Paszkowski  %1 = tail call spir_func i32 @_Z15get_image_width14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %img)
77*ec7baca1SMichal Paszkowski  %2 = tail call spir_func i32 @_Z16get_image_height14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %img)
78*ec7baca1SMichal Paszkowski  %3 = tail call spir_func i32 @_Z15get_image_depth14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %img)
79*ec7baca1SMichal Paszkowski  %4 = tail call spir_func <4 x i32> @_Z13get_image_dim14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0) %img)
80f20c9c42SAndrey Tretyakov  %5 = add nsw i32 %2, %1
81f20c9c42SAndrey Tretyakov  %6 = add nsw i32 %5, %3
82f20c9c42SAndrey Tretyakov  %7 = extractelement <4 x i32> %4, i32 0
83f20c9c42SAndrey Tretyakov  %8 = add nsw i32 %6, %7
84f20c9c42SAndrey Tretyakov  %9 = extractelement <4 x i32> %4, i32 1
85f20c9c42SAndrey Tretyakov  %10 = add nsw i32 %8, %9
86f20c9c42SAndrey Tretyakov  %11 = extractelement <4 x i32> %4, i32 2
87f20c9c42SAndrey Tretyakov  %12 = add nsw i32 %10, %11
88f20c9c42SAndrey Tretyakov  %13 = extractelement <4 x i32> %4, i32 3
89f20c9c42SAndrey Tretyakov  %14 = add nsw i32 %12, %13
90f20c9c42SAndrey Tretyakov  store i32 %14, i32 addrspace(1)* %sizes, align 4
91f20c9c42SAndrey Tretyakov  ret void
92f20c9c42SAndrey Tretyakov}
93f20c9c42SAndrey Tretyakov
94*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0))
95f20c9c42SAndrey Tretyakov
96*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z16get_image_height14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0))
97f20c9c42SAndrey Tretyakov
98*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_depth14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0))
99f20c9c42SAndrey Tretyakov
100*ec7baca1SMichal Paszkowskideclare spir_func <4 x i32> @_Z13get_image_dim14ocl_image3d_ro(target("spirv.Image", void, 2, 0, 0, 0, 0, 0, 0))
101f20c9c42SAndrey Tretyakov
102*ec7baca1SMichal Paszkowskidefine spir_kernel void @test_image2d_array_depth_t(i32 addrspace(1)* nocapture %sizes, target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0) %array) {
103*ec7baca1SMichal Paszkowski  %1 = tail call spir_func i32 @_Z15get_image_width26ocl_image2d_array_depth_ro(target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0) %array)
104*ec7baca1SMichal Paszkowski  %2 = tail call spir_func i32 @_Z16get_image_height26ocl_image2d_array_depth_ro(target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0) %array)
105*ec7baca1SMichal Paszkowski  %3 = tail call spir_func i64 @_Z20get_image_array_size26ocl_image2d_array_depth_ro(target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0) %array)
106f20c9c42SAndrey Tretyakov  %4 = trunc i64 %3 to i32
107f20c9c42SAndrey Tretyakov  %5 = add nsw i32 %2, %1
108f20c9c42SAndrey Tretyakov  %6 = add nsw i32 %5, %4
109f20c9c42SAndrey Tretyakov  store i32 %5, i32 addrspace(1)* %sizes, align 4
110f20c9c42SAndrey Tretyakov  ret void
111f20c9c42SAndrey Tretyakov}
112f20c9c42SAndrey Tretyakov
113*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z15get_image_width26ocl_image2d_array_depth_ro(target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0))
114f20c9c42SAndrey Tretyakov
115*ec7baca1SMichal Paszkowskideclare spir_func i32 @_Z16get_image_height26ocl_image2d_array_depth_ro(target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0))
116f20c9c42SAndrey Tretyakov
117*ec7baca1SMichal Paszkowskideclare spir_func i64 @_Z20get_image_array_size26ocl_image2d_array_depth_ro(target("spirv.Image", void, 1, 1, 1, 0, 0, 0, 0))
118