Skip to content

Commit ce9c6e7

Browse files
smilczekigcbot
authored andcommitted
Remove tracking of bindlessOffset for images
In case of bindless images, NEO runtime passes bindless offset in image arg of kernel. This bindless offset doesn't need to be tracked because arg tracking in OCLBIConverter pass is only needed to find image's BTI, which isn't used with bindless as it's the bindless offset that is used to find the image's surface state instead of values stored in the Binding Table. This commit partially removes the tracking.
1 parent 332d61e commit ce9c6e7

11 files changed

+58
-56
lines changed

IGC/Compiler/Optimizer/OCLBIUtils.cpp

+16-14
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ SPDX-License-Identifier: MIT
2020
#include "Probe/Assertion.h"
2121
#include "IGC/common/StringMacros.hpp"
2222
#include <llvm/Support/Casting.h>
23+
#include "IGC/Compiler/CISACodeGen/messageEncoding.hpp"
2324

2425
using namespace llvm;
2526
using namespace IGC;
@@ -293,26 +294,27 @@ BufferType CImagesBI::CImagesUtils::getImageType(ParamMap* pParamMap, CallInst*
293294

294295
void CImagesBI::createGetBufferPtr()
295296
{
297+
if (m_pCodeGenContext->getModuleMetaData()->UseBindlessImage)
298+
{
299+
// If bindless image is preferred, don't create GetBufferPtr, instead just map the bindless pointer
300+
Value* pImg = m_pCallInst->getOperand(0);
301+
ConstantInt* bindlessIndex = ConstantInt::get(m_pIntType, BINDLESS_BTI);
302+
uint32_t addrSpace = EncodeAS4GFXResource(*bindlessIndex, BINDLESS);
303+
Type* ptrTy = llvm::PointerType::get(m_pFloatType, addrSpace);
304+
305+
Value* basePointer = isa<IntegerType>(pImg->getType()) ?
306+
BitCastInst::CreateBitOrPointerCast(pImg, ptrTy, "bindless_img", m_pCallInst) :
307+
BitCastInst::CreatePointerCast(pImg, ptrTy, "bindless_img", m_pCallInst);
308+
m_args.push_back(basePointer);
309+
return;
310+
}
311+
296312
Value* pImg = nullptr;
297313
ConstantInt* imageIndex = CImagesUtils::getImageIndex(m_pParamMap, m_pCallInst, 0, pImg);
298314
BufferType bufType = CImagesUtils::getImageType(m_pParamMap, m_pCallInst, 0);
299315
unsigned int addressSpace = IGC::EncodeAS4GFXResource(*imageIndex, bufType);
300316
Type* ptrTy = llvm::PointerType::get(m_pFloatType, addressSpace);
301317

302-
if (bufType == BufferType::BINDLESS)
303-
{
304-
// If bindless image is preferred, don't create GetBufferPtr, instead just map the bindless pointer
305-
auto modMD = m_pCodeGenContext->getModuleMetaData();
306-
if (modMD->UseBindlessImage)
307-
{
308-
Value* basePointer = isa<IntegerType>(pImg->getType()) ?
309-
BitCastInst::CreateBitOrPointerCast(pImg, ptrTy, "bindless_img", m_pCallInst) :
310-
BitCastInst::CreatePointerCast(pImg, ptrTy, "bindless_img", m_pCallInst);
311-
m_args.push_back(basePointer);
312-
return;
313-
}
314-
}
315-
316318
Function* pFuncGetBufferPtr = getFunctionDeclaration(GenISAIntrinsic::GenISA_GetBufferPtr, ptrTy);
317319

318320
//%base_ptr = call float* @llvm.GenISA.GetBufferPtr(i32 %bufIdx, i32 %type)

IGC/Compiler/tests/OCLBIConverter/get_image_prop-typed-pointers.ll

+10-11
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
define spir_kernel void @kernel_1d_array(%spirv.Image._void_0_0_1_0_0_0_0 addrspace(1)* %img) {
1919
; CHECK-LABEL: define spir_kernel void @kernel_1d_array(
2020
; CHECK-NOT: __builtin_IB_get_image1d_array_size
21-
; CHECK: [[BINDLESS_IMG_1D:%.*]] = addrspacecast %spirv.Image._void_0_0_1_0_0_0_0 addrspace(1)* %img to float addrspace(393216)*
22-
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216f32(float addrspace(393216)* [[BINDLESS_IMG_1D]], i32 0)
21+
; CHECK: [[BINDLESS_IMG_1D:%.*]] = inttoptr i32 %1 to float addrspace(393468)*
22+
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468f32(float addrspace(393468)* [[BINDLESS_IMG_1D]], i32 0)
2323
; CHECK-NEXT: extractelement <4 x i32> [[TMP_1D]], i32 1
2424
%data = ptrtoint %spirv.Image._void_0_0_1_0_0_0_0 addrspace(1)* %img to i64
2525
%1 = trunc i64 %data to i32
@@ -30,8 +30,8 @@ define spir_kernel void @kernel_1d_array(%spirv.Image._void_0_0_1_0_0_0_0 addrsp
3030
define spir_kernel void @kernel_2d_array(%spirv.Image._void_1_0_1_0_0_0_0 addrspace(1)* %img) {
3131
; CHECK-LABEL: define spir_kernel void @kernel_2d_array(
3232
; CHECK-NOT: __builtin_IB_get_image1d_array_size
33-
; CHECK: [[BINDLESS_IMG_1D:%.*]] = addrspacecast %spirv.Image._void_1_0_1_0_0_0_0 addrspace(1)* %img to float addrspace(393216)*
34-
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216f32(float addrspace(393216)* [[BINDLESS_IMG_1D]], i32 0)
33+
; CHECK: [[BINDLESS_IMG_1D:%.*]] = inttoptr i32 %1 to float addrspace(393468)*
34+
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468f32(float addrspace(393468)* [[BINDLESS_IMG_1D]], i32 0)
3535
; CHECK-NEXT: extractelement <4 x i32> [[TMP_1D]], i32 2
3636
%data = ptrtoint %spirv.Image._void_1_0_1_0_0_0_0 addrspace(1)* %img to i64
3737
%1 = trunc i64 %data to i32
@@ -41,20 +41,19 @@ define spir_kernel void @kernel_2d_array(%spirv.Image._void_1_0_1_0_0_0_0 addrsp
4141

4242
define spir_kernel void @kernel_3d(%spirv.Image._void_2_0_0_0_0_0_0 addrspace(1)* %img) {
4343
; CHECK-LABEL: define spir_kernel void @kernel_3d(
44-
; CHECK-SAME: [[SPIRV_IMAGE__VOID_2_0_0_0_0_0_0:%.*]] addrspace(1)* [[IMG:%.*]]) {
4544
%data = ptrtoint %spirv.Image._void_2_0_0_0_0_0_0 addrspace(1)* %img to i64
4645
%1 = trunc i64 %data to i32
4746
; CHECK-NOT: __builtin_IB_get_image_width
4847
; CHECK-NOT: __builtin_IB_get_image_height
4948
; CHECK-NOT: __builtin_IB_get_image_height
50-
; CHECK: [[BINDLESS_IMG:%.*]] = addrspacecast [[SPIRV_IMAGE__VOID_2_0_0_0_0_0_0]] addrspace(1)* [[IMG]] to float addrspace(393216)*
51-
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216f32(float addrspace(393216)* [[BINDLESS_IMG]], i32 0)
49+
; CHECK: [[BINDLESS_IMG:%.*]] = inttoptr i32 %1 to float addrspace(393468)*
50+
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468f32(float addrspace(393468)* [[BINDLESS_IMG]], i32 0)
5251
; CHECK-NEXT: extractelement <4 x i32> [[TMP1]], i32 0
53-
; CHECK-NEXT: [[BINDLESS_IMG1:%.*]] = addrspacecast [[SPIRV_IMAGE__VOID_2_0_0_0_0_0_0]] addrspace(1)* [[IMG]] to float addrspace(393216)*
54-
; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216f32(float addrspace(393216)* [[BINDLESS_IMG1]], i32 0)
52+
; CHECK-NEXT: [[BINDLESS_IMG1:%.*]] = inttoptr i32 %1 to float addrspace(393468)*
53+
; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468f32(float addrspace(393468)* [[BINDLESS_IMG1]], i32 0)
5554
; CHECK-NEXT: extractelement <4 x i32> [[TMP2]], i32 1
56-
; CHECK-NEXT: [[BINDLESS_IMG2:%.*]] = addrspacecast [[SPIRV_IMAGE__VOID_2_0_0_0_0_0_0]] addrspace(1)* [[IMG]] to float addrspace(393216)*
57-
; CHECK-NEXT: [[TMP3:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216f32(float addrspace(393216)* [[BINDLESS_IMG2]], i32 0)
55+
; CHECK-NEXT: [[BINDLESS_IMG2:%.*]] = inttoptr i32 %1 to float addrspace(393468)*
56+
; CHECK-NEXT: [[TMP3:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468f32(float addrspace(393468)* [[BINDLESS_IMG2]], i32 0)
5857
; CHECK-NEXT: extractelement <4 x i32> [[TMP3]], i32 2
5958
%call = call spir_func i32 @__builtin_IB_get_image_width(i32 %1)
6059
%call1 = call spir_func i32 @__builtin_IB_get_image_height(i32 %1)

IGC/Compiler/tests/OCLBIConverter/get_image_prop.ll

+10-11
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
define spir_kernel void @kernel_1d_array(ptr addrspace(1) %img) {
2020
; CHECK-LABEL: define spir_kernel void @kernel_1d_array(
2121
; CHECK-NOT: __builtin_IB_get_image1d_array_size
22-
; CHECK: [[BINDLESS_IMG_1D:%.*]] = addrspacecast ptr addrspace(1) %img to ptr addrspace(393216)
23-
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216(ptr addrspace(393216) [[BINDLESS_IMG_1D]], i32 0)
22+
; CHECK: [[BINDLESS_IMG_1D:%.*]] = inttoptr i32 %1 to ptr addrspace(393468)
23+
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468(ptr addrspace(393468) [[BINDLESS_IMG_1D]], i32 0)
2424
; CHECK-NEXT: extractelement <4 x i32> [[TMP_1D]], i32 1
2525
%data = ptrtoint ptr addrspace(1) %img to i64
2626
%1 = trunc i64 %data to i32
@@ -31,8 +31,8 @@ define spir_kernel void @kernel_1d_array(ptr addrspace(1) %img) {
3131
define spir_kernel void @kernel_2d_array(ptr addrspace(1) %img) {
3232
; CHECK-LABEL: define spir_kernel void @kernel_2d_array(
3333
; CHECK-NOT: __builtin_IB_get_image1d_array_size
34-
; CHECK: [[BINDLESS_IMG_1D:%.*]] = addrspacecast ptr addrspace(1) %img to ptr addrspace(393216)
35-
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216(ptr addrspace(393216) [[BINDLESS_IMG_1D]], i32 0)
34+
; CHECK: [[BINDLESS_IMG_1D:%.*]] = inttoptr i32 %1 to ptr addrspace(393468)
35+
; CHECK-NEXT: [[TMP_1D:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468(ptr addrspace(393468) [[BINDLESS_IMG_1D]], i32 0)
3636
; CHECK-NEXT: extractelement <4 x i32> [[TMP_1D]], i32 2
3737
%data = ptrtoint ptr addrspace(1) %img to i64
3838
%1 = trunc i64 %data to i32
@@ -42,20 +42,19 @@ define spir_kernel void @kernel_2d_array(ptr addrspace(1) %img) {
4242

4343
define spir_kernel void @kernel_3d(ptr addrspace(1) %img) {
4444
; CHECK-LABEL: define spir_kernel void @kernel_3d(
45-
; CHECK-SAME: ptr addrspace(1) [[IMG:%.*]]) {
4645
%data = ptrtoint ptr addrspace(1) %img to i64
4746
%1 = trunc i64 %data to i32
4847
; CHECK-NOT: __builtin_IB_get_image_width
4948
; CHECK-NOT: __builtin_IB_get_image_height
5049
; CHECK-NOT: __builtin_IB_get_image_height
51-
; CHECK: [[BINDLESS_IMG:%.*]] = addrspacecast ptr addrspace(1) [[IMG]] to ptr addrspace(393216)
52-
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216(ptr addrspace(393216) [[BINDLESS_IMG]], i32 0)
50+
; CHECK: [[BINDLESS_IMG:%.*]] = inttoptr i32 %1 to ptr addrspace(393468)
51+
; CHECK-NEXT: [[TMP1:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468(ptr addrspace(393468) [[BINDLESS_IMG]], i32 0)
5352
; CHECK-NEXT: extractelement <4 x i32> [[TMP1]], i32 0
54-
; CHECK-NEXT: [[BINDLESS_IMG1:%.*]] = addrspacecast ptr addrspace(1) [[IMG]] to ptr addrspace(393216)
55-
; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216(ptr addrspace(393216) [[BINDLESS_IMG1]], i32 0)
53+
; CHECK-NEXT: [[BINDLESS_IMG1:%.*]] = inttoptr i32 %1 to ptr addrspace(393468)
54+
; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468(ptr addrspace(393468) [[BINDLESS_IMG1]], i32 0)
5655
; CHECK-NEXT: extractelement <4 x i32> [[TMP2]], i32 1
57-
; CHECK-NEXT: [[BINDLESS_IMG2:%.*]] = addrspacecast ptr addrspace(1) [[IMG]] to ptr addrspace(393216)
58-
; CHECK-NEXT: [[TMP3:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393216(ptr addrspace(393216) [[BINDLESS_IMG2]], i32 0)
56+
; CHECK-NEXT: [[BINDLESS_IMG2:%.*]] = inttoptr i32 %1 to ptr addrspace(393468)
57+
; CHECK-NEXT: [[TMP3:%.*]] = call <4 x i32> @llvm.genx.GenISA.resinfoptr.p393468(ptr addrspace(393468) [[BINDLESS_IMG2]], i32 0)
5958
; CHECK-NEXT: extractelement <4 x i32> [[TMP3]], i32 2
6059
%call = call spir_func i32 @__builtin_IB_get_image_width(i32 %1)
6160
%call1 = call spir_func i32 @__builtin_IB_get_image_height(i32 %1)

IGC/Compiler/tests/OCLBIConverter/inline_sampler_bindless-typed-pointers.ll

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ entry:
2121
; CHECK: [[ZEXT:%[0-9]+]] = zext i32 %inlineSampler to i64
2222
; CHECK: [[OR:%[0-9]+]] = or i64 [[ZEXT]], 1
2323
; CHECK: [[TRUNC:%[0-9]+]] = trunc i64 [[OR]] to i32
24-
; CHECK: %bindless_img = addrspacecast %spirv.Image._void_1_0_0_0_0_0_0 addrspace(1)* %srcImg to float addrspace(393218)*
24+
; CHECK: [[TRUNC_IMG:%[0-9]+]] = trunc i64 %1 to i32
25+
; CHECK: %bindless_img = inttoptr i32 [[TRUNC_IMG]] to float addrspace(393468)*
2526
; CHECK: %bindless_sampler = inttoptr i32 [[TRUNC]] to float addrspace(655360)*
26-
; CHECK: = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610f32.p393218f32.p655360f32(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, float addrspace(196610)* undef, float addrspace(393218)* %bindless_img, float addrspace(655360)* %bindless_sampler, i32 0, i32 0, i32 0)
27+
; CHECK: = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610f32.p393468f32.p655360f32(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, float addrspace(196610)* undef, float addrspace(393468)* %bindless_img, float addrspace(655360)* %bindless_sampler, i32 0, i32 0, i32 0)
2728

2829
%0 = inttoptr i64 16 to %spirv.Sampler addrspace(2)*
2930
%1 = ptrtoint %spirv.Image._void_1_0_0_0_0_0_0 addrspace(1)* %srcImg to i64

IGC/Compiler/tests/OCLBIConverter/inline_sampler_bindless.ll

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ entry:
2222
; CHECK: [[ZEXT:%[0-9]+]] = zext i32 %inlineSampler to i64
2323
; CHECK: [[OR:%[0-9]+]] = or i64 [[ZEXT]], 1
2424
; CHECK: [[TRUNC:%[0-9]+]] = trunc i64 [[OR]] to i32
25-
; CHECK: %bindless_img = addrspacecast ptr addrspace(1) %srcImg to ptr addrspace(393218)
25+
; CHECK: [[TRUNC_IMG:%[0-9]+]] = trunc i64 %1 to i32
26+
; CHECK: %bindless_img = inttoptr i32 [[TRUNC_IMG]] to ptr addrspace(393468)
2627
; CHECK: %bindless_sampler = inttoptr i32 [[TRUNC]] to ptr addrspace(655360)
27-
; CHECK: = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610.p393218.p655360(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196610) undef, ptr addrspace(393218) %bindless_img, ptr addrspace(655360) %bindless_sampler, i32 0, i32 0, i32 0)
28+
; CHECK: = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610.p393468.p655360(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196610) undef, ptr addrspace(393468) %bindless_img, ptr addrspace(655360) %bindless_sampler, i32 0, i32 0, i32 0)
2829

2930
%0 = inttoptr i64 16 to ptr addrspace(2)
3031
%1 = ptrtoint ptr addrspace(1) %srcImg to i64

IGC/Compiler/tests/OCLBIConverter/ocl_bindless_sampler_2d-typed-pointers.ll

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ entry:
2020
%conv = trunc i64 %0 to i32
2121
%conv2 = trunc i64 %1 to i32
2222

23-
; CHECK: %bindless_img = addrspacecast %spirv.Image._void_1_0_0_0_0_0_0 addrspace(1)* %img to float addrspace(393218)*
23+
; CHECK: %bindless_img = inttoptr i32 %conv to float addrspace(393468)*
2424
; CHECK-NEXT: %bindless_sampler = addrspacecast %spirv.Sampler addrspace(2)* %sampler to float addrspace(655360)*
25-
; CHECK-NEXT: call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610f32.p393218f32.p655360f32(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, float addrspace(196610)* undef, float addrspace(393218)* %bindless_img, float addrspace(655360)* %bindless_sampler, i32 0, i32 0, i32 0)
25+
; CHECK-NEXT: call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610f32.p393468f32.p655360f32(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, float addrspace(196610)* undef, float addrspace(393468)* %bindless_img, float addrspace(655360)* %bindless_sampler, i32 0, i32 0, i32 0)
2626

2727
%call = call spir_func <4 x float> @__builtin_IB_OCL_2d_sample_l(i32 %conv, i32 %conv2, <2 x float> zeroinitializer, float 0.000000e+00)
2828
ret void

IGC/Compiler/tests/OCLBIConverter/ocl_bindless_sampler_2d.ll

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ entry:
2121
%conv = trunc i64 %0 to i32
2222
%conv2 = trunc i64 %1 to i32
2323

24-
; CHECK: %bindless_img = addrspacecast ptr addrspace(1) %img to ptr addrspace(393218)
24+
; CHECK: %bindless_img = inttoptr i32 %conv to ptr addrspace(393468)
2525
; CHECK-NEXT: %bindless_sampler = addrspacecast ptr addrspace(2) %sampler to ptr addrspace(655360)
26-
; CHECK-NEXT: call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610.p393218.p655360(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196610) undef, ptr addrspace(393218) %bindless_img, ptr addrspace(655360) %bindless_sampler, i32 0, i32 0, i32 0)
26+
; CHECK-NEXT: call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196610.p393468.p655360(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196610) undef, ptr addrspace(393468) %bindless_img, ptr addrspace(655360) %bindless_sampler, i32 0, i32 0, i32 0)
2727

2828
%call = call spir_func <4 x float> @__builtin_IB_OCL_2d_sample_l(i32 %conv, i32 %conv2, <2 x float> zeroinitializer, float 0.000000e+00)
2929
ret void

IGC/Compiler/tests/OCLBIConverter/sampled_image_handle_2d-typed-pointers.ll

+4-4
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ entry:
3333
%conv2 = trunc i64 %7 to i32
3434

3535
; CHECK: [[OR:%.*]] = or i64 %sampler_offset, 1
36-
; CHECK: %bindless_img = inttoptr i64 %__SYCLKernel.1.copyload to float addrspace(393216)*
36+
; CHECK: %bindless_img = inttoptr i32 %conv to float addrspace(393468)*
3737
; CHECK-NEXT: %bindless_sampler = inttoptr i64 [[OR]] to float addrspace(655360)*
38-
; CHECK-NEXT: %call1 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608f32.p393216f32.p655360f32(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, float addrspace(196608)* undef, float addrspace(393216)* %bindless_img, float addrspace(655360)* %bindless_sampler, i32 0, i32 0, i32 0)
38+
; CHECK-NEXT: %call1 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608f32.p393468f32.p655360f32(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, float addrspace(196608)* undef, float addrspace(393468)* %bindless_img, float addrspace(655360)* %bindless_sampler, i32 0, i32 0, i32 0)
3939

4040
%call = call spir_func <4 x float> @__builtin_IB_OCL_2d_sample_l(i32 %conv, i32 %conv2, <2 x float> zeroinitializer, float 0.000000e+00)
4141
%astype3 = inttoptr i64 %__SYCLKernel.3.copyload to %spirv.Image._void_1_0_0_0_0_0_0 addrspace(1)*
@@ -47,9 +47,9 @@ entry:
4747
%conv4 = trunc i64 %10 to i32
4848

4949
; CHECK: [[OR2:%.*]] = or i64 %sampler_offset{{.*}}, 1
50-
; CHECK: [[IMG2:%bindless_img[0-9]+]] = inttoptr i64 %__SYCLKernel.3.copyload to float addrspace(393216)*
50+
; CHECK: [[IMG2:%bindless_img[0-9]+]] = inttoptr i32 %conv3 to float addrspace(393468)*
5151
; CHECK-NEXT: [[SAMPLER2:%bindless_sampler[0-9]+]] = inttoptr i64 [[OR2]] to float addrspace(655360)*
52-
; CHECK-NEXT: %call26 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608f32.p393216f32.p655360f32(float 0.000000e+00, float %CoordX2, float %CoordY3, float 0.000000e+00, float 0.000000e+00, float addrspace(196608)* undef, float addrspace(393216)* [[IMG2]], float addrspace(655360)* [[SAMPLER2]], i32 0, i32 0, i32 0)
52+
; CHECK-NEXT: %call26 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608f32.p393468f32.p655360f32(float 0.000000e+00, float %CoordX2, float %CoordY3, float 0.000000e+00, float 0.000000e+00, float addrspace(196608)* undef, float addrspace(393468)* [[IMG2]], float addrspace(655360)* [[SAMPLER2]], i32 0, i32 0, i32 0)
5353

5454
%call2 = call spir_func <4 x float> @__builtin_IB_OCL_2d_sample_l(i32 %conv3, i32 %conv4, <2 x float> zeroinitializer, float 0.000000e+00)
5555
ret void

IGC/Compiler/tests/OCLBIConverter/sampled_image_handle_2d.ll

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ entry:
3434
%conv2 = trunc i64 %2 to i32
3535

3636
; CHECK: [[OR:%.*]] = or i64 %sampler_offset, 1
37-
; CHECK: %bindless_img = inttoptr i64 %__SYCLKernel.1.copyload to ptr addrspace(393216)
37+
; CHECK: %bindless_img = inttoptr i32 %conv to ptr addrspace(393468)
3838
; CHECK-NEXT: %bindless_sampler = inttoptr i64 [[OR]] to ptr addrspace(655360)
39-
; CHECK-NEXT: %call1 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608.p393216.p655360(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196608) undef, ptr addrspace(393216) %bindless_img, ptr addrspace(655360) %bindless_sampler, i32 0, i32 0, i32 0)
39+
; CHECK-NEXT: %call1 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608.p393468.p655360(float 0.000000e+00, float %CoordX, float %CoordY, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196608) undef, ptr addrspace(393468) %bindless_img, ptr addrspace(655360) %bindless_sampler, i32 0, i32 0, i32 0)
4040

4141
%call = call spir_func <4 x float> @__builtin_IB_OCL_2d_sample_l(i32 %conv, i32 %conv2, <2 x float> zeroinitializer, float 0.000000e+00)
4242
%astype3 = inttoptr i64 %__SYCLKernel.3.copyload to ptr addrspace(1)
@@ -48,9 +48,9 @@ entry:
4848
%conv4 = trunc i64 %5 to i32
4949

5050
; CHECK: [[OR2:%.*]] = or i64 %sampler_offset{{.*}}, 1
51-
; CHECK: [[IMG2:%bindless_img[0-9]+]] = inttoptr i64 %__SYCLKernel.3.copyload to ptr addrspace(393216)
51+
; CHECK: [[IMG2:%bindless_img[0-9]+]] = inttoptr i32 %conv3 to ptr addrspace(393468)
5252
; CHECK-NEXT: [[SAMPLER2:%bindless_sampler[0-9]+]] = inttoptr i64 [[OR2]] to ptr addrspace(655360)
53-
; CHECK-NEXT: %call26 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608.p393216.p655360(float 0.000000e+00, float %CoordX2, float %CoordY3, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196608) undef, ptr addrspace(393216) [[IMG2]], ptr addrspace(655360) [[SAMPLER2]], i32 0, i32 0, i32 0)
53+
; CHECK-NEXT: %call26 = call <4 x float> @llvm.genx.GenISA.sampleLptr.v4f32.f32.p196608.p393468.p655360(float 0.000000e+00, float %CoordX2, float %CoordY3, float 0.000000e+00, float 0.000000e+00, ptr addrspace(196608) undef, ptr addrspace(393468) [[IMG2]], ptr addrspace(655360) [[SAMPLER2]], i32 0, i32 0, i32 0)
5454

5555
%call2 = call spir_func <4 x float> @__builtin_IB_OCL_2d_sample_l(i32 %conv3, i32 %conv4, <2 x float> zeroinitializer, float 0.000000e+00)
5656
ret void

0 commit comments

Comments
 (0)