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